diff --git a/docs/kcl/index.md b/docs/kcl/index.md index 53e16a9d3c3..2edc91006db 100644 --- a/docs/kcl/index.md +++ b/docs/kcl/index.md @@ -77,6 +77,7 @@ layout: manual * [`helix`](kcl/std-helix) * [`hole`](kcl/hole) * [`hollow`](kcl/hollow) + * [`intersect`](kcl/intersect) * [`lastSegX`](kcl/lastSegX) * [`lastSegY`](kcl/lastSegY) * [`legAngX`](kcl/legAngX) @@ -123,6 +124,7 @@ layout: manual * [`sqrt`](kcl/sqrt) * [`startProfileAt`](kcl/startProfileAt) * [`startSketchOn`](kcl/startSketchOn) + * [`subtract`](kcl/subtract) * [`sweep`](kcl/sweep) * [`tangentToEnd`](kcl/tangentToEnd) * [`tangentialArc`](kcl/tangentialArc) @@ -131,6 +133,7 @@ layout: manual * [`toDegrees`](kcl/toDegrees) * [`toRadians`](kcl/toRadians) * [`translate`](kcl/translate) + * [`union`](kcl/union) * [`xLine`](kcl/xLine) * [`yLine`](kcl/yLine) * **std::math** diff --git a/docs/kcl/intersect.md b/docs/kcl/intersect.md index 9f8d3587321..26c0e9c679a 100644 --- a/docs/kcl/intersect.md +++ b/docs/kcl/intersect.md @@ -4,14 +4,15 @@ excerpt: "Intersect returns the shared volume between multiple solids, preservin layout: manual --- -**WARNING:** This function is deprecated. - Intersect returns the shared volume between multiple solids, preserving only overlapping regions. Intersect computes the geometric intersection of multiple solid bodies, returning a new solid representing the volume that is common to all input solids. This operation is useful for determining shared material regions, verifying fit, and analyzing overlapping geometries in assemblies. ```js -intersect(solids: [Solid]): [Solid] +intersect( + solids: [Solid], + tolerance?: number, +): [Solid] ``` @@ -20,6 +21,7 @@ intersect(solids: [Solid]): [Solid] | Name | Type | Description | Required | |----------|------|-------------|----------| | `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to intersect. | Yes | +| `tolerance` | [`number`](/docs/kcl/types/number) | The tolerance to use for the intersection operation. | No | ### Returns @@ -32,23 +34,24 @@ intersect(solids: [Solid]): [Solid] // Intersect two cubes using the stdlib functions. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = cube([8, 8]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) intersectedPart = intersect([part001, part002]) ``` -![Rendered example of intersect 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEMl0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VX/S1xzzTUPfrEXe7HXfsd3fMfP4qqrrrrqX3D27Nlbf+RHfuRz/uEf/uG3ueqqq6666qr/v9CDHvQgrrrqqquuuuqqq/43+PAP//Dvep3XeZ33vnDhAlddddVV/5KTJ09y33333fr1X//17/MP//APv81VV1111VVX/f9E5aqrrrrqqquuuup/iRd7sRd7bYBv/MZv5MKFC/xPZJur/veyzf9HtvnfzjbP7U3e5E14kzd5kwd/+Id/+Hd9yId8yEO46qqrrrrqqv+fCK666qqrrrrqqqv+F3ixF3ux177mmmseDHDhwgX+p5KEJCQhCUlIQhKSkIQkJCEJ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993KVVddddVVV131/x2Vq6666qqr/tucPXv2VoBjx47xX8E295PEfyXb3E8S/x1s80CS+J/CNs+PJP63ss0LI4mrrvrvZpv/i3Z2dgA4e/bsrVx11VVXXXXVVf/fUbnqqquuuuq/zX333XcrwM7ODtvb2+zt7QEgif9stnkgSfxXsc0DSeK/g20eSBL/09jmuUni/wLb/EskcdVV/1a2+f/ANlddddVVV1111VUvBMFVV1111VX/rf7hH/7htwGOHTvG/WxjG9v8V7GNbWzzX802trHNfyfb2MY2trHN/0S2sY1tbGOb/6tsYxvb2MY2trGNbWxjG9tc9f+HbWxjG9vYxja2sY1tbPN/kW1sYxvb2Ob52dnZAeC+++67lauuuuqqq6666v87gquuuuqqq/5b/f3f//1vA9x00008P7axjW3+q9jGNrb5r2Yb29jGNv/dbGMb29jmfyrb2MY2trGNbf4/sY1tbGMb29jGNraxjW1sY5ur/mewjW1sYxvb2MY2trGNbWxjG9v8f2Ab29jGNraxzVVXXXXVVVddddW/AZWrrrrqqqv+Rzh27Bj/EtvcTxL/FWxzP0n8V7PNA0niv5NtHkgS/5PZ5vmRxP93tvn3ksT/Z7a56t/HNv/RdnZ2ADh79uwzuOqqq6666qqrrgIqV1111VVX/bf6h3/4h98B2NnZ4V/DNveTxH8F2zyQJP6r2eZ+kvjvZpvnJon/6WzzgkjiqheNba666l9im/9KOzs7XHXVVVddddVVVz0Alauuuuqqq/5bnT179laAY8eO8W9lm/tJ4r+Kbe4nif9qtnkgSfxPYJvnJon/LWzzgkjiqquuev5s8z/JfffddytXXXXVVVddddVVQHDVVVddddV/q/vuu+/W++6779adnR2OHTvGv5dtbGOb/0q2sY1t/rvYxja2sc3/JLaxjW1sY5v/jWxjG9vYxja2sc1VV/1fZxvb2MY2trGNbWzzP8XOzg4A9913361cddVVV1111VVXAcFVV1111VX/7c6ePXsrwM7ODv+RbGMb2/xXso1tbGOb/y62sY1tbPM/jW1sYxvb2OZ/M9vYxja2sY1tbGObq676n842trGNbWxjG9vY5qqrrrrqqquuuup/KYKrrrrqqqv+2/393//9bwPcdNNN/GexjW1s81/NNraxzX8n29jGNrb5n8g2trGNbWzz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/xPb2MY2trGNbe537NgxAM6ePXsrV1111VVXXXXVVVdQueqqq6666n+Uf/iHf/gd/pPZ5n6S+O9gmweSxH832zw3SfxPZ5vnRxJXgW3+PSRx1b+Oba7697HNVVddddVVV1111X8QKlddddVVV/2Pcvbs2VsBdnZ2+K9gmweSxH8H2zyQJP4nsM1zk8T/BrZ5QSRx1YvGNldd9Z/FNv+RdnZ2ALjvvvtu5aqrrrrqqquuuuoKgquuuuqqq/5Hue+++2697777bj127Bg7Ozv8V7ONbWzz38k2trGNbf4nsY1tbGOb/41sYxvb2MY2trHNVVdd9R/LNraxjW1sYxvbXHXVVVddddVVV/0XILjqqquuuup/nLNnz94KsLOzg21sY5v/araxjW3+u9nGNraxzf8ktrGNbWxjm//NbGMb29jGNraxzVVXXfX82cY2trGNbWxjm/8qOzs7ANx33323ctVVV1111VVXXfVsBFddddVVV/2P8/d///e/DXDLLbfwQLaxjW3+q9nGNraxzX8329jGNrb5n8Y2trGNbWzzf4FtbGMb29jGNraxzVVX/V9lG9vYxja2sY1tbPM/wc7ODgBnz569lauuuuqqq6666qpno3LVVVddddX/OGfPnn0GwM0338wLYpv7SeK/mm0eSBL/nWzzQJL4n8Y2z48k/q+wzQsjiauu+p/GNlddddVVV1111VX/h1G56qqrrrrqf5z77rvvVv4VbHM/Sfx3sM39JPHfzTYPJIn/qWzz3CTxf5FtXhSSuOqq/wi2+f/i2LFjANx33323ctVVV1111VVXXfVsVK666qqrrvof5+zZs7cCHDt2jJtvvpl/D0n8d5PE/zSSuOr/Bklc9f+Lba56Xtvb21x11VVXXXXVVVc9H1Suuuqqq676H+e+++679R/+4R9++8Ve7MVe+13e5V246qqrrrrqqhfFfffdd+s//MM//A5XXXXVVVddddVVz4Ye9KAHcdVVV1111f9MH/7hH/5d11xzzYO56qqrrrrqqhfBb/3Wb33Pb/3Wb303V1111VVXXXXVVc+GHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/2fROWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V/GPg3Jg1dcXJrQAAAAASUVORK5CYII=) +![Rendered example of intersect 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADp3klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqr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8QC2LUk8gG1LEsB99913K1ddddVVV1111X839KAHPYirrrrqqquuuuqqq6666qqrrrrqqquuuur/JCpXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6v4h8BFD2pVy4m/KoAAAAASUVORK5CYII=) ```js // Intersect two cubes using operators. @@ -56,23 +59,24 @@ intersectedPart = intersect([part001, part002]) // Codemods will generate the stdlib function call instead. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = cube([8, 8]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) // This is the equivalent of: intersect([part001, part002]) intersectedPart = part001 & part002 ``` -![Rendered example of intersect 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEMl0lEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VX/S1xzzTUPfrEXe7HXfsd3fMfP4qqrrrrqX3D27Nlbf+RHfuRz/uEf/uG3ueqqq6666qr/v9CDHvQgrrrqqquuuuqqq/43+PAP//Dvep3XeZ33vnDhAlddddVV/5KTJ09y33333fr1X//17/MP//APv81VV1111VVX/f9E5aqrrrrqqquuuup/iRd7sRd7bYBv/MZv5MKFC/xPZJur/veyzf9HtvnfzjbP7U3e5E14kzd5kwd/+Id/+Hd9yId8yEO46qqrrrrqqv+fCK666qqrrrrqqqv+F3ixF3ux177mmmseDHDhwgX+p5KEJCQhCUlIQhKSkIQkJCEJ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993KVVddddVVV131/x2Vq6666qqr/tucPXv2VoBjx47xX8E295PEfyXb3E8S/x1s80CS+J/CNs+PJP63ss0LI4mrrvrvZpv/i3Z2dgA4e/bsrVx11VVXXXXVVf/fUbnqqquuuuq/zX333XcrwM7ODtvb2+zt7QEgif9stnkgSfxXsc0DSeK/g20eSBL/09jmuUni/wLb/EskcdVV/1a2+f/ANlddddVVV1111VUvBMFVV1111VX/rf7hH/7htwGOHTvG/WxjG9v8V7GNbWzzX802trHNfyfb2MY2trHN/0S2sY1tbGOb/6tsYxvb2MY2trGNbWxjG9tc9f+HbWxjG9vYxja2sY1tbPN/kW1sYxvb2Ob52dnZAeC+++67lauuuuqqq6666v87gquuuuqqq/5b/f3f//1vA9x00008P7axjW3+q9jGNrb5r2Yb29jGNv/dbGMb29jmfyrb2MY2trGNbf4/sY1tbGMb29jGNraxjW1sY5ur/mewjW1sYxvb2MY2trGNbWxjG9v8f2Ab29jGNraxzVVXXXXVVVddddW/AZWrrrrqqqv+Rzh27Bj/EtvcTxL/FWxzP0n8V7PNA0niv5NtHkgS/5PZ5vmRxP93tvn3ksT/Z7a56t/HNv/RdnZ2ADh79uwzuOqqq6666qqrrgIqV1111VVX/bf6h3/4h98B2NnZ4V/DNveTxH8F2zyQJP6r2eZ+kvjvZpvnJon/6WzzgkjiqheNba666l9im/9KOzs7XHXVVVddddVVVz0Alauuuuqqq/5bnT179laAY8eO8W9lm/tJ4r+Kbe4nif9qtnkgSfxPYJvnJon/LWzzgkjiqquuev5s8z/JfffddytXXXXVVVddddVVQHDVVVddddV/q/vuu+/W++6779adnR2OHTvGv5dtbGOb/0q2sY1t/rvYxja2sc3/JLaxjW1sY5v/jWxjG9vYxja2sc1VV/1fZxvb2MY2trGNbWzzP8XOzg4A9913361cddVVV1111VVXAcFVV1111VX/7c6ePXsrwM7ODv+RbGMb2/xXso1tbGOb/y62sY1tbPM/jW1sYxvb2OZ/M9vYxja2sY1tbGObq676n842trGNbWxjG9vY5qqrrrrqqquuuup/KYKrrrrqqqv+2/393//9bwPcdNNN/GexjW1s81/NNraxzX8n29jGNrb5n8g2trGNbWzz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/xPb2MY2trGNbe537NgxAM6ePXsrV1111VVXXXXVVVdQueqqq6666n+Uf/iHf/gd/pPZ5n6S+O9gmweSxH832zw3SfxPZ5vnRxJXgW3+PSRx1b+Oba7697HNVVddddVVV1111X8QKlddddVVV/2Pcvbs2VsBdnZ2+K9gmweSxH8H2zyQJP4nsM1zk8T/BrZ5QSRx1YvGNldd9Z/FNv+RdnZ2ALjvvvtu5aqrrrrqqquuuuoKgquuuuqqq/5Hue+++2697777bj127Bg7Ozv8V7ONbWzz38k2trGNbf4nsY1tbGOb/41sYxvb2MY2trHNVVdd9R/LNraxjW1sYxvbXHXVVVddddVVV/0XILjqqquuuup/nLNnz94KsLOzg21sY5v/araxjW3+u9nGNraxzf8ktrGNbWxjm//NbGMb29jGNraxzVVXXfX82cY2trGNbWxjm/8qOzs7ANx33323ctVVV1111VVXXfVsBFddddVVV/2P8/d///e/DXDLLbfwQLaxjW3+q9nGNraxzX8329jGNrb5n8Y2trGNbWzzf4FtbGMb29jGNraxzVVX/V9lG9vYxja2sY1tbPM/wc7ODgBnz569lauuuuqqq6666qpno3LVVVddddX/OGfPnn0GwM0338wLYpv7SeK/mm0eSBL/nWzzQJL4n8Y2z48k/q+wzQsjiauu+p/GNlddddVVV1111VX/h1G56qqrrrrqf5z77rvvVv4VbHM/Sfx3sM39JPHfzTYPJIn/qWzz3CTxf5FtXhSSuOqq/wi2+f/i2LFjANx33323ctVVV1111VVXXfVsVK666qqrrvof5+zZs7cCHDt2jJtvvpl/D0n8d5PE/zSSuOr/Bklc9f+Lba56Xtvb21x11VVXXXXVVVc9H1Suuuqqq676H+e+++679R/+4R9++8Ve7MVe+13e5V246qqrrrrqqhfFfffdd+s//MM//A5XXXXVVVddddVVz4Ye9KAHcdVVV1111f9MH/7hH/5d11xzzYO56qqrrrrqqhfBb/3Wb33Pb/3Wb303V1111VVXXXXVVc+GHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/2fROWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V/GPg3Jg1dcXJrQAAAAASUVORK5CYII=) +![Rendered example of intersect 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADp3klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqr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8QC2LUk8gG1LEsB99913K1ddddVVV1111X839KAHPYirrrrqqquuuuqqq6666qqrrrrqqquuuur/JCpXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6v4h8BFD2pVy4m/KoAAAAASUVORK5CYII=) diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 5e65a36378f..d9b4b136db5 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -101101,1694 +101101,996 @@ "includeInSnippet": true, "description": "The solids to intersect.", "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + }, + { + "name": "tolerance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": true, - "examples": [ - "// Intersect two cubes using the stdlib functions.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = cube([8, 8])\n\nintersectedPart = intersect([part001, part002])", - "// Intersect two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = cube([8, 8])\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002" - ] - }, - { - "name": "lastSegX", - "summary": "Extract the 'x' axis value of the last line segment in the provided 2-d sketch.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ { - "description": "A path that goes to a point.", + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -102801,7 +102103,7 @@ "type": { "type": "string", "enum": [ - "ToPoint" + "Base" ] }, "from": { @@ -102847,13 +102149,14 @@ } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ "__geoMeta", "ccw", "center", "from", + "radius", "to", "type", "units" @@ -102862,11 +102165,11 @@ "type": { "type": "string", "enum": [ - "TangentialArcTo" + "Arc" ] }, "center": { - "description": "the arc's center", + "description": "Center of the circle that this arc is drawn on.", "type": "array", "items": { "type": "number", @@ -102875,8 +102178,13 @@ "maxItems": 2, "minItems": 2 }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, "ccw": { - "description": "arc's direction", + "description": "True if the arc is counterclockwise.", "type": "boolean" }, "from": { @@ -102920,875 +102228,216 @@ ] } } - }, + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Mm" ] } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Cm" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "M" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Inches" ] } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "Feet" ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" ] } } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "origin", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "plane" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "tag": { - "description": "The tag of the path.", + "yAxis": { + "description": "What should the plane's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "zAxis": { + "description": "The z-axis (normal).", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A base path.", + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "solid", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" + "face" ] }, "id": { @@ -103847,10 +102496,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -103900,323 +102545,6 @@ } } }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "BasePath": { "description": "A base path.", "type": "object", @@ -104367,615 +102695,1720 @@ } } }, - "required": true, - "includeInSnippet": true, - "description": "The sketch whose line segment is being queried", - "labelRequired": false + "required": false, + "description": "The tolerance to use for the intersection operation.", + "labelRequired": true } ], "returnValue": { "name": "", - "type": "number", + "type": "[Solid]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TyF64", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [lastSegX(%), 0])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "lastSegY", - "summary": "Extract the 'y' axis value of the last line segment in the provided 2-d sketch.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Intersect two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nintersectedPart = intersect([part001, part002])", + "// Intersect two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002" + ] + }, + { + "name": "lastSegX", + "summary": "Extract the 'x' axis value of the last line segment in the provided 2-d sketch.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "sketch", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, "minItems": 2 }, "to": { @@ -105011,10 +104444,12 @@ } }, { - "description": "An angled line to.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ "__geoMeta", + "ccw", + "center", "from", "to", "type", @@ -105024,20 +104459,22 @@ "type": { "type": "string", "enum": [ - "AngledLineTo" + "TangentialArcTo" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true + "ccw": { + "description": "arc's direction", + "type": "boolean" }, "from": { "description": "The from point.", @@ -105082,10 +104519,12 @@ } }, { - "description": "A base path.", + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ "__geoMeta", + "ccw", + "center", "from", "to", "type", @@ -105095,9 +104534,23 @@ "type": { "type": "string", "enum": [ - "Base" + "TangentialArc" ] }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, "from": { "description": "The from point.", "type": "array", @@ -105141,7 +104594,7 @@ } }, { - "description": "A circular arc, not necessarily tangential to the current point.", + "description": "a complete arc", "type": "object", "required": [ "__geoMeta", @@ -105157,11 +104610,11 @@ "type": { "type": "string", "enum": [ - "Arc" + "Circle" ] }, "center": { - "description": "Center of the circle that this arc is drawn on.", + "description": "the arc's center", "type": "array", "items": { "type": "number", @@ -105171,12 +104624,12 @@ "minItems": 2 }, "radius": { - "description": "Radius of the circle that this arc is drawn on.", + "description": "the arc's radius", "type": "number", "format": "double" }, "ccw": { - "description": "True if the arc is counterclockwise.", + "description": "arc's direction This is used to compute the tangential angle.", "type": "boolean" }, "from": { @@ -105220,92 +104673,552 @@ ] } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } }, { + "description": "A base path.", "type": "object", "required": [ - "type" + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Feet" + "CircleThreePoint" ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" ] } } @@ -106073,177 +105986,12 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [0, lastSegY(%)])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "legAngX", - "summary": "Compute the angle of the given leg for x.", - "description": "", - "tags": [ - "utilities" - ], - "keywordArguments": false, - "args": [ - { - "name": "hypotenuse", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "leg", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "legAngX(5, 3)" - ] - }, - { - "name": "legAngY", - "summary": "Compute the angle of the given leg for y.", - "description": "", - "tags": [ - "utilities" - ], - "keywordArguments": false, - "args": [ - { - "name": "hypotenuse", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "leg", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "legAngY(5, 3)" - ] - }, - { - "name": "legLen", - "summary": "Compute the length of the given leg.", - "description": "", - "tags": [ - "utilities" - ], - "keywordArguments": false, - "args": [ - { - "name": "hypotenuse", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "leg", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "legLen(5, 3)" + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [lastSegX(%), 0])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" ] }, { - "name": "line", - "summary": "Extend the current sketch with a new straight line.", + "name": "lastSegY", + "summary": "Extract the 'y' axis value of the last line segment in the provided 2-d sketch.", "description": "", "tags": [], "keywordArguments": true, @@ -107902,23 +107650,269 @@ }, "required": true, "includeInSnippet": true, - "description": "Which sketch should this path be added to?", + "description": "The sketch whose line segment is being queried", "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TyF64", + "type": "number", + "format": "double" }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [5, 0])\n |> line(end = [20, 5])\n |> line(end = [0, lastSegY(%)])\n |> line(end = [-15, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "legAngX", + "summary": "Compute the angle of the given leg for x.", + "description": "", + "tags": [ + "utilities" + ], + "keywordArguments": false, + "args": [ { - "name": "endAbsolute", - "type": "[number]", + "name": "hypotenuse", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Array_size_2_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "leg", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "legAngX(5, 3)" + ] + }, + { + "name": "legAngY", + "summary": "Compute the angle of the given leg for y.", + "description": "", + "tags": [ + "utilities" + ], + "keywordArguments": false, + "args": [ + { + "name": "hypotenuse", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "leg", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "legAngY(5, 3)" + ] + }, + { + "name": "legLen", + "summary": "Compute the length of the given leg.", + "description": "", + "tags": [ + "utilities" + ], + "keywordArguments": false, + "args": [ + { + "name": "hypotenuse", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "leg", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "legLen(5, 3)" + ] + }, + { + "name": "line", + "summary": "Extend the current sketch with a new straight line.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "sketch", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } }, - "maxItems": 2, - "minItems": 2, - "nullable": true, "definitions": { "Path": { "description": "A path.", @@ -109503,12 +109497,13 @@ } } }, - "required": false, - "description": "Which absolute point should this line go to? Incompatible with `end`.", - "labelRequired": true + "required": true, + "includeInSnippet": true, + "description": "Which sketch should this path be added to?", + "labelRequired": false }, { - "name": "end", + "name": "endAbsolute", "type": "[number]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", @@ -111106,21 +111101,22 @@ } }, "required": false, - "includeInSnippet": true, - "description": "How far away (along the X and Y axes) should this line go? Incompatible with `endAbsolute`.", + "description": "Which absolute point should this line go to? Incompatible with `end`.", "labelRequired": true }, { - "name": "tag", - "type": "TagNode", + "name": "end", + "type": "[number]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "title": "Nullable_Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, "nullable": true, "definitions": { "Path": { @@ -112707,1841 +112703,1233 @@ } }, "required": false, - "description": "Create a new tag which refers to this line", + "includeInSnippet": true, + "description": "How far away (along the X and Y axes) should this line go? Incompatible with `endAbsolute`.", "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + { + "name": "tag", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "z": { + "type": "number", + "format": "double" } } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "triangle = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n // The 'end' argument means it ends at exactly [10, 0].\n // This is an absolute measurement, it is NOT relative to\n // the start of the sketch.\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0], tag = $thirdLineOfTriangle)\n |> close()\n |> extrude(length = 5)\n\nbox = startSketchOn(XZ)\n |> startProfileAt([10, 10], %)\n // The 'to' argument means move the pen this much.\n // So, [10, 0] is a relative distance away from the current point.\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0], tag = $thirdLineOfBox)\n |> close()\n |> extrude(length = 5)" - ] - }, - { - "name": "ln", - "summary": "Compute the natural logarithm of the number.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [ln(100), 15])\n |> line(end = [5, -6])\n |> line(end = [-10, -10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "loft", - "summary": "Create a 3D surface or solid by interpolating between two or more sketches.", - "description": "The sketches need to closed and on the same plane.", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "sketches", - "type": "[Sketch]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "definitions": { - "Sketch": { + }, + "Solid": { "type": "object", "required": [ "artifactId", + "height", "id", - "on", - "originalId", - "paths", - "start", - "units" + "sketch", + "units", + "value" ], "properties": { "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "description": "The id of the solid.", "type": "string", "format": "uuid" }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { - "$ref": "#/components/schemas/BasePath" + "$ref": "#/components/schemas/ArtifactId" } ] }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "sketch": { + "description": "The sketch.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/Sketch" } ] }, - "originalId": { + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", "type": "string", - "format": "uuid" + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "Path": { - "description": "A path.", + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { - "description": "A path that goes to a point.", + "description": "An extrude plane.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "extrudePlane" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -114549,74 +113937,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "An extruded arc.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" + "extrudeArc" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -114624,74 +113982,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A arc that is tangential to the last path segment", + "description": "Geometry metadata.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" + "chamfer" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -114699,552 +114027,61 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "a complete arc", + "description": "Geometry metadata.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" + "fillet" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } @@ -115252,2577 +114089,2143 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - } + ] }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } - } + ] }, - { + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - ] + } }, - "TagDeclarator": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" - }, - "digest": { + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "sourceRange": { - "description": "The source range.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/TagDeclarator" } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } + "nullable": true }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" ] } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } } }, - "Solid": { + "TagIdentifier": { "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "type": "string" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", + "id": { + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "radius": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", + "tag": { "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true } } }, { - "description": "An extruded arc.", + "description": "A chamfer.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "length", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudeArc" + "chamfer" ] }, - "faceId": { - "description": "The face id for the extrude plane.", + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + } + ] + } + } + }, + "required": false, + "description": "Create a new tag which refers to this line", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "length": { + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Which sketches to loft. Must include at least 2 sketches.", - "labelRequired": false - }, - { - "name": "vDegree", - "type": "NonZeroU32", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "NonZeroU32", - "type": "integer", - "format": "uint32", - "minimum": 1.0, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "triangle = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n // The 'end' argument means it ends at exactly [10, 0].\n // This is an absolute measurement, it is NOT relative to\n // the start of the sketch.\n |> line(endAbsolute = [10, 0])\n |> line(endAbsolute = [0, 10])\n |> line(endAbsolute = [-10, 0], tag = $thirdLineOfTriangle)\n |> close()\n |> extrude(length = 5)\n\nbox = startSketchOn(XZ)\n |> startProfileAt([10, 10], %)\n // The 'to' argument means move the pen this much.\n // So, [10, 0] is a relative distance away from the current point.\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0], tag = $thirdLineOfBox)\n |> close()\n |> extrude(length = 5)" + ] + }, + { + "name": "ln", + "summary": "Compute the natural logarithm of the number.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [ln(100), 15])\n |> line(end = [5, -6])\n |> line(end = [-10, -10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "loft", + "summary": "Create a 3D surface or solid by interpolating between two or more sketches.", + "description": "The sketches need to closed and on the same plane.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "sketches", + "type": "[Sketch]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Sketch", + "type": "array", + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", "oneOf": [ { + "description": "A path that goes to a point.", "type": "object", "required": [ - "artifactId", - "id", - "origin", + "__geoMeta", + "from", + "to", "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } + "ToPoint" ] }, - "value": { - "$ref": "#/components/schemas/PlaneType" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "yAxis": { - "description": "What should the plane's Y axis be?", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "artifactId", - "id", - "solid", + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "face" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "value": { - "description": "The tag of the face.", - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "yAxis": { - "description": "What should the face's Y axis be?", + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified.", - "labelRequired": true - }, - { - "name": "bezApproximateRational", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Boolean", - "type": "boolean", - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/GeoMeta" } ] } @@ -119212,19 +117615,18 @@ }, "required": true, "includeInSnippet": true, - "description": "Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary.", - "labelRequired": true + "description": "Which sketches to loft. Must include at least 2 sketches.", + "labelRequired": false }, { - "name": "baseCurveIndex", - "type": "integer", + "name": "vDegree", + "type": "NonZeroU32", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_uint32", + "title": "NonZeroU32", "type": "integer", "format": "uint32", - "minimum": 0.0, - "nullable": true, + "minimum": 1.0, "definitions": { "Sketch": { "type": "object", @@ -120809,19 +119211,18 @@ } } }, - "required": false, - "description": "This can be set to override the automatically determined topological base curve, which is usually the first section encountered.", + "required": true, + "includeInSnippet": true, + "description": "Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified.", "labelRequired": true }, { - "name": "tolerance", - "type": "number", + "name": "bezApproximateRational", + "type": "bool", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, + "title": "Boolean", + "type": "boolean", "definitions": { "Sketch": { "type": "object", @@ -122406,21 +120807,20 @@ } } }, - "required": false, - "description": "Tolerance for the loft operation.", + "required": true, + "includeInSnippet": true, + "description": "Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary.", "labelRequired": true }, { - "name": "tagStart", - "type": "TagNode", + "name": "baseCurveIndex", + "type": "integer", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "title": "Nullable_uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, "nullable": true, "definitions": { "Sketch": { @@ -124007,20 +122407,17 @@ } }, "required": false, - "description": "A named tag for the face at the start of the loft, i.e. the original sketch", + "description": "This can be set to override the automatically determined topological base curve, which is usually the first section encountered.", "labelRequired": true }, { - "name": "tagEnd", - "type": "TagNode", + "name": "tolerance", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "title": "Nullable_double", + "type": "number", + "format": "double", "nullable": true, "definitions": { "Sketch": { @@ -125607,2854 +124004,1731 @@ } }, "required": false, - "description": "A named tag for the face at the end of the loft, i.e. the last sketch", + "description": "Tolerance for the loft operation.", "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Solid", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Solid", - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + { + "name": "tagStart", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + ], + "nullable": true, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Loft a square and a triangle.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ntriangleSketch = startSketchOn(offsetPlane(XY, offset = 75))\n |> startProfileAt([0, 125], %)\n |> line(end = [-15, -30])\n |> line(end = [30, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nloft([squareSketch, triangleSketch])", - "// Loft a square, a circle, and another circle.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n])", - "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n ],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)" - ] - }, - { - "name": "log", - "summary": "Compute the logarithm of the number with respect to an arbitrary base.", - "description": "The result might not be correctly rounded owing to implementation details; `log2()` can produce more accurate results for base 2, and `log10()` can produce more accurate results for base 10.", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "base", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log(100, 5), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "log10", - "summary": "Compute the base 10 logarithm of the number.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log10(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "log2", - "summary": "Compute the base 2 logarithm of the number.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log2(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "map", - "summary": "Apply a function to every element of a list.", - "description": "Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f(c)]`", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "array", - "type": "[KclValue]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_KclValue", - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - }, - "definitions": { - "KclValue": { - "description": "Any KCL value.", - "oneOf": [ { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Uuid" + "Feet" ] - }, - "value": { - "type": "string", - "format": "uuid" } } }, { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Bool" + "Yards" ] - }, - "value": { - "type": "boolean" } } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { "type": "object", "required": [ - "ty", + "artifactId", + "id", + "origin", "type", - "value" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Number" + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } ] }, "value": { - "type": "number", - "format": "double" + "$ref": "#/components/schemas/PlaneType" }, - "ty": { - "$ref": "#/components/schemas/NumericType" + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { + "description": "A face.", "type": "object", "required": [ + "artifactId", + "id", + "solid", "type", - "value" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "String" + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } ] }, "value": { + "description": "The tag of the face.", "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] }, { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ { + "description": "An extrude plane.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "HomArray" + "extrudePlane" ] }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } }, { + "description": "An extruded arc.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Object" + "extrudeArc" ] }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" + "format": "uuid" }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], "nullable": true }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Face" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" } } }, { + "description": "Geometry metadata.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Solid" + "chamfer" ] }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "faceId": { + "description": "The id for the chamfer surface.", "type": "string", - "enum": [ - "Helix" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/Helix" - } - } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, "id": { - "description": "The ID of the imported geometry.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" } } }, { + "description": "Geometry metadata.", "type": "object", "required": [ + "faceId", + "id", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Type" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" + "fillet" ] }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, + "tag": { + "description": "The tag.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } + "$ref": "#/components/schemas/TagDeclarator" } ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } - } + "nullable": true }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] - } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Default" - ] - }, - "len": { - "$ref": "#/components/schemas/UnitLen" + "format": "uuid" }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] } } } ] }, - "UnitLen": { - "description": "A unit of length.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", + "id", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" + "fillet" ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + }, + "id": { + "description": "The id of the engine command that called this fillet.", "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", - "enum": [ - "Feet" - ] + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } } }, { + "description": "A chamfer.", "type": "object", "required": [ + "edgeId", + "id", + "length", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Yards" + "chamfer" ] - } - } - } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + }, + "id": { + "description": "The id of the engine command that called this chamfer.", "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", - "enum": [ - "Radians" - ] + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } } } ] }, - "Plane": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "yAxis": { - "description": "What should the plane's Y axis be?", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "TagIdentifier": { "type": "object", "required": [ - "x", - "y", - "z" + "value" ], "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" + "value": { + "type": "string" } } - }, - "Face": { - "description": "A face.", + } + } + }, + "required": false, + "description": "A named tag for the face at the start of the loft, i.e. the original sketch", + "labelRequired": true + }, + { + "name": "tagEnd", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "Sketch": { "type": "object", "required": [ "artifactId", "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "on", + "originalId", + "paths", + "start", + "units" ], "properties": { "id": { - "description": "The id of the face.", + "description": "The id of the sketch (this will change when the engine's reference to it changes).", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } }, - "zAxis": { - "description": "The z-axis (normal).", + "on": { + "description": "What the sketch is on (can be a plane or a face).", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SketchSurface" } ] }, - "solid": { - "description": "The solid the face is on.", + "start": { + "description": "The starting path.", "allOf": [ { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/BasePath" } ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } }, "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", "allOf": [ { "$ref": "#/components/schemas/ArtifactId" } ] }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", + "originalId": { "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } + "format": "uuid" }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "Path": { + "description": "A path.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "ToPoint" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -128462,369 +125736,58 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } }, { - "description": "An extruded arc.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "extrudeArc" + "TangentialArcTo" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, "to": { "description": "The to point.", @@ -129476,6 +126439,127 @@ } ] }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -129499,6 +126583,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -129652,3504 +126747,1856 @@ } ] }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" ] } - } + ] }, - "TagIdentifier": { + "Point3d": { "type": "object", "required": [ - "value" + "x", + "y", + "z" ], "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } + "x": { + "type": "number", + "format": "double" }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" } - ] + } }, - "Helix": { - "description": "A helix.", + "Solid": { "type": "object", "required": [ - "angleStart", "artifactId", - "ccw", - "revolutions", + "height", + "id", + "sketch", "units", "value" ], "properties": { - "value": { - "description": "The id of the helix.", + "id": { + "description": "The id of the solid.", "type": "string", "format": "uuid" }, "artifactId": { - "description": "The artifact ID.", + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { "$ref": "#/components/schemas/ArtifactId" } ] }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } }, - "angleStart": { - "description": "Start angle (in degrees).", + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", "type": "number", "format": "double" }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true }, - "cylinderId": { - "description": "The cylinder the helix was created on.", + "endCapId": { + "description": "The id of the extrusion end cap", "type": "string", "format": "uuid", "nullable": true }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "mapFn", - "type": "FunctionSource", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "FunctionSource", - "type": "null", - "definitions": { - "KclValue": { - "description": "Any KCL value.", + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { + "description": "An extrude plane.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Uuid" + "extrudePlane" ] }, - "value": { + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" - } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] }, - "value": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "String" - ] + "format": "uuid" }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } } } }, { + "description": "An extruded arc.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "HomArray" + "extrudeArc" ] }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", - "enum": [ - "Object" - ] + "format": "uuid" }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "TagIdentifier" - ] + "format": "uuid" }, - "value": { - "type": "string" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } }, { + "description": "Geometry metadata.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TagDeclarator" + "chamfer" ] }, - "value": { - "type": "string" + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], "nullable": true }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Plane" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] - }, - "value": { - "$ref": "#/components/schemas/Face" } } }, { + "description": "Geometry metadata.", "type": "object", "required": [ - "type", - "value" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Sketch" + "fillet" ] }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "faceId": { + "description": "The id for the fillet surface.", "type": "string", - "enum": [ - "Solid" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Helix" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/Helix" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } - }, + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ { - "description": "Data for an imported geometry.", + "description": "A fillet.", "type": "object", "required": [ + "edgeId", "id", - "type", - "value" + "radius", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ImportedGeometry" + "fillet" ] }, "id": { - "description": "The ID of the imported geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", - "enum": [ - "Module" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/ModuleId" + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } } }, { + "description": "A chamfer.", "type": "object", "required": [ + "edgeId", + "id", + "length", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Type" + "chamfer" ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + }, + "id": { + "description": "The id of the engine command that called this chamfer.", "type": "string", - "enum": [ - "KclNone" - ] + "format": "uuid" }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } + "length": { + "type": "number", + "format": "double" }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } - } + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, + "tag": { + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } + "$ref": "#/components/schemas/TagDeclarator" } ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] - } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" - ] - }, - "len": { - "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] + "nullable": true } } } ] }, - "Plane": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, "units": { "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] }, - "zAxis": { - "description": "The z-axis (normal).", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "solid": { - "description": "The solid the face is on.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "Solid": { + "TagIdentifier": { "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "type": "string" } } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + } + }, + "required": false, + "description": "A named tag for the face at the end of the loft, i.e. the last sketch", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Solid", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Solid", + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "maxItems": 2, + "minItems": 2 }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[KclValue]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_KclValue", - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - }, - "definitions": { - "KclValue": { - "description": "Any KCL value.", + ] + }, + "UnitLen": { + "description": "A unit of length.", "oneOf": [ { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Uuid" + "Mm" ] - }, - "value": { - "type": "string", - "format": "uuid" } } }, { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Bool" + "Cm" ] - }, - "value": { - "type": "boolean" } } }, { "type": "object", "required": [ - "ty", - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Number" + "M" ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" } } }, { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "String" + "Inches" ] - }, - "value": { - "type": "string" } } }, { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "MixedArray" + "Feet" ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } } } }, { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "HomArray" + "Yards" ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } } } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { "type": "object", "required": [ + "artifactId", + "id", + "origin", "type", - "value" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Object" + "plane" ] }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { + "id": { + "description": "The id of the plane.", "type": "string", - "enum": [ - "TagIdentifier" + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } ] }, "value": { - "type": "string" + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { + "description": "A face.", "type": "object", "required": [ + "artifactId", + "id", + "solid", "type", - "value" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "TagDeclarator" + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } ] }, "value": { + "description": "The tag of the face.", "type": "string" }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" - } - } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } ] }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - } + ] }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] + "$ref": "#/components/schemas/Point3d" } - } + ] }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] + "$ref": "#/components/schemas/Solid" } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] - } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" ] }, - "len": { + "units": { "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] } } } ] }, - "Plane": { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -133199,74 +128646,6 @@ } } }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "Solid": { "type": "object", "required": [ @@ -133335,106 +128714,56 @@ } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] + "radius": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The face id for the extrude plane.", + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } }, { - "description": "Geometry metadata.", + "description": "A chamfer.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "length", "type" ], "properties": { @@ -133444,1594 +128773,1101 @@ "chamfer" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this chamfer.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] + "length": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The id for the fillet surface.", + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } } ] }, - "TagDeclarator": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" - }, - "digest": { + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 }, - "paths": { - "description": "The paths in the sketch.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/Path" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "start": { - "description": "The starting path.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/BasePath" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } + ], + "nullable": true }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Loft a square and a triangle.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ntriangleSketch = startSketchOn(offsetPlane(XY, offset = 75))\n |> startProfileAt([0, 125], %)\n |> line(end = [-15, -30])\n |> line(end = [30, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\nloft([squareSketch, triangleSketch])", + "// Loft a square, a circle, and another circle.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft([\n squareSketch,\n circleSketch0,\n circleSketch1\n])", + "// Loft a square, a circle, and another circle with options.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch0 = startSketchOn(offsetPlane(XY, offset = 75))\n |> circle(center = [0, 100], radius = 50)\n\ncircleSketch1 = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 20)\n\nloft(\n [\n squareSketch,\n circleSketch0,\n circleSketch1\n ],\n baseCurveIndex = 0,\n bezApproximateRational = false,\n tolerance = 0.000001,\n vDegree = 2,\n)" + ] + }, + { + "name": "log", + "summary": "Compute the logarithm of the number with respect to an arbitrary base.", + "description": "The result might not be correctly rounded owing to implementation details; `log2()` can produce more accurate results for base 2, and `log10()` can produce more accurate results for base 10.", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "base", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log(100, 5), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "log10", + "summary": "Compute the base 10 logarithm of the number.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log10(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "log2", + "summary": "Compute the base 2 logarithm of the number.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [log2(100), 0])\n |> line(end = [5, 8])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "map", + "summary": "Apply a function to every element of a list.", + "description": "Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f(c)]`", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "array", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, + "definitions": { + "KclValue": { + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string", + "format": "uuid" + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "value": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ty": { + "$ref": "#/components/schemas/NumericType" + } } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" } - ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "type": "string" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "$ref": "#/components/schemas/Helix" + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" } - ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "$ref": "#/components/schemas/ModuleId" + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/KclNone" + } } } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" + }, + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] + } } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] + } } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" + ] + } } } - } - ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "r = 10 // radius\nfn drawCircle(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n}\n\n// Call `drawCircle`, passing in each element of the array.\n// The outputs from each `drawCircle` form a new array,\n// which is the return value from `map`.\ncircles = map([1..3], drawCircle)", - "r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\ncircles = map([1..3], fn(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n})" - ] - }, - { - "name": "max", - "summary": "Compute the maximum of the given arguments.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "args", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = max(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "min", - "summary": "Compute the minimum of the given arguments.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "args", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = min(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "offsetPlane", - "summary": "Offset a plane by a distance along its normal.", - "description": "For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ' plane and 10 units away from it.", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "plane", - "type": "PlaneData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "PlaneData", - "description": "Orientation data that can be used to construct a plane, not a plane in itself.", - "oneOf": [ - { - "description": "The XY plane.", - "type": "string", - "enum": [ - "XY" - ] - }, - { - "description": "The opposite side of the XY plane.", - "type": "string", - "enum": [ - "-XY" - ] - }, - { - "description": "The XZ plane.", - "type": "string", - "enum": [ - "XZ" - ] - }, - { - "description": "The opposite side of the XZ plane.", - "type": "string", - "enum": [ - "-XZ" - ] - }, - { - "description": "The YZ plane.", - "type": "string", - "enum": [ - "YZ" - ] - }, - { - "description": "The opposite side of the YZ plane.", - "type": "string", - "enum": [ - "-YZ" ] }, - { - "description": "A defined plane.", - "type": "object", - "required": [ - "plane" - ], - "properties": { - "plane": { + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { "type": "object", "required": [ - "origin", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "type": { + "type": "string", + "enum": [ + "Mm" ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" ] } } - } - }, - "additionalProperties": false - } - ], - "definitions": { - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" }, - "y": { - "type": "number", - "format": "double" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } }, - "z": { - "type": "number", - "format": "double" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The plane (e.g. 'XY') which this new plane is created from.", - "labelRequired": false - }, - { - "name": "offset", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double", - "definitions": { + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "UnitAngle": { + "description": "A unit of angle.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ] + }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, "Point3d": { "type": "object", "required": [ @@ -135053,262 +129889,371 @@ "format": "double" } } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Distance from the standard plane this new plane will be created at.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Plane", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Plane", - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" + }, + "Face": { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - } - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Loft a square and a circle on the `XY` plane using offset.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", - "// Loft a square and a circle on the `XZ` plane using offset.\nsquareSketch = startSketchOn(XZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(XZ, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", - "// Loft a square and a circle on the `YZ` plane using offset.\nsquareSketch = startSketchOn(YZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(YZ, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", - "// Loft a square and a circle on the `-XZ` plane using offset.\nsquareSketch = startSketchOn(-XZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(-XZ, offset = -150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", - "// A circle on the XY plane\nstartSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = 10, center = [0, 0])\n\n// Triangle on the plane 4 units above\nstartSketchOn(offsetPlane(XY, offset = 4))\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> close()" - ] - }, - { - "name": "patternCircular2d", - "summary": "Repeat a 2-dimensional sketch some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "sketchSet", - "type": "[Sketch]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "definitions": { + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -136128,127 +131073,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -136272,17 +131096,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -136436,312 +131249,69 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "x", - "y", - "z" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "x": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "y": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "z": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "Solid": { + "TagIdentifier": { "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "type": "string" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, "EdgeCut": { "description": "A fillet or a chamfer.", "oneOf": [ @@ -136827,66 +131397,76 @@ } ] }, - "BasePath": { - "description": "A base path.", + "Helix": { + "description": "A helix.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" }, - "tag": { - "description": "The tag of the path.", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "TagIdentifier": { + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", "type": "object", - "required": [ - "value" - ], "properties": { - "value": { - "type": "string" + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true } } } @@ -136894,832 +131474,626 @@ }, "required": true, "includeInSnippet": true, - "description": "Which sketch(es) to pattern", - "labelRequired": false + "labelRequired": true }, { - "name": "instances", - "type": "integer", + "name": "mapFn", + "type": "FunctionSource", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0.0, + "title": "FunctionSource", + "type": "null", "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", + "KclValue": { + "description": "Any KCL value.", "oneOf": [ { - "description": "A path that goes to a point.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "Uuid" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string", + "format": "uuid" } } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" + "Bool" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", + "value": { "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } }, { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", + "ty", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" + "Number" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "value": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ty": { + "$ref": "#/components/schemas/NumericType" } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" + "String" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "MixedArray" ] }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "HomArray" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units", - "x" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "Object" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "TagIdentifier" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "TagDeclarator" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" + "Plane" ] }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] }, - "to": { - "description": "The to point.", + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] }, - "tag": { - "description": "The tag of the path.", - "allOf": [ + "value": { + "$ref": "#/components/schemas/KclNone" + } + } + } + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } } ], - "nullable": true + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] + } + } + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" ] } } @@ -137815,225 +132189,105 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", + "UnitAngle": { + "description": "A unit of angle.", "oneOf": [ { "type": "object", "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "Degrees" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", "type": "object", "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } + "Radians" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } ] }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, "ArtifactId": { "type": "string", "format": "uuid" @@ -138087,6 +132341,74 @@ } } }, + "Face": { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, "Solid": { "type": "object", "required": [ @@ -138340,175 +132662,49 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "labelRequired": true - }, - { - "name": "center", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2, - "definitions": { + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -139328,195 +133524,63 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" } - } - }, + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { "type": "object", "required": [ - "type" + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "M" + "plane" ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + }, + "id": { + "description": "The id of the plane.", "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } ] }, "value": { @@ -139636,311 +133700,68 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "x", - "y", - "z" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "x": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "y": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + ], + "nullable": true }, - "sketch": { - "description": "The sketch.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } - ] + } }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -140027,66 +133848,76 @@ } ] }, - "BasePath": { - "description": "A base path.", + "Helix": { + "description": "A helix.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" }, - "tag": { - "description": "The tag of the path.", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "TagIdentifier": { + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", "type": "object", - "required": [ - "value" - ], "properties": { - "value": { - "type": "string" + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true } } } @@ -140094,2627 +133925,2633 @@ }, "required": true, "includeInSnippet": true, - "description": "The center about which to make the pattern. This is a 2D vector.", "labelRequired": true - }, - { - "name": "arcDegrees", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double", - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + } + ], + "returnValue": { + "name": "", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, + "definitions": { + "KclValue": { + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] + }, + "value": { + "type": "string", + "format": "uuid" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] + }, + "value": { + "type": "boolean" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { + "type": "number", + "format": "double" + }, + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" } } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" } } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" } } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" } } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] + }, + "value": { + "$ref": "#/components/schemas/ModuleId" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "value": { + "$ref": "#/components/schemas/KclNone" + } } } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } + }, + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] + } } } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] + } } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" + ] } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", - "labelRequired": true - }, - { - "name": "rotateDuplicates", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Boolean", - "type": "boolean", - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + ] + }, + "UnitAngle": { + "description": "A unit of angle.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Face": { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + ] + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" }, - "maxItems": 3, - "minItems": 3 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "properties": { + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "r = 10 // radius\nfn drawCircle(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n}\n\n// Call `drawCircle`, passing in each element of the array.\n// The outputs from each `drawCircle` form a new array,\n// which is the return value from `map`.\ncircles = map([1..3], drawCircle)", + "r = 10 // radius\n// Call `map`, using an anonymous function instead of a named one.\ncircles = map([1..3], fn(id) {\n return startSketchOn(XY)\n |> circle(center = [id * 2 * r, 0], radius = r)\n})" + ] + }, + { + "name": "max", + "summary": "Compute the maximum of the given arguments.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "args", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = max(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "min", + "summary": "Compute the minimum of the given arguments.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "args", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 70, length = min(15, 31, 4, 13, 22))\n |> line(end = [20, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "offsetPlane", + "summary": "Offset a plane by a distance along its normal.", + "description": "For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ' plane and 10 units away from it.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "plane", + "type": "PlaneData", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "PlaneData", + "description": "Orientation data that can be used to construct a plane, not a plane in itself.", + "oneOf": [ + { + "description": "The XY plane.", + "type": "string", + "enum": [ + "XY" + ] }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { + { + "description": "The opposite side of the XY plane.", + "type": "string", + "enum": [ + "-XY" + ] + }, + { + "description": "The XZ plane.", + "type": "string", + "enum": [ + "XZ" + ] + }, + { + "description": "The opposite side of the XZ plane.", + "type": "string", + "enum": [ + "-XZ" + ] + }, + { + "description": "The YZ plane.", + "type": "string", + "enum": [ + "YZ" + ] + }, + { + "description": "The opposite side of the YZ plane.", + "type": "string", + "enum": [ + "-YZ" + ] + }, + { + "description": "A defined plane.", + "type": "object", + "required": [ + "plane" + ], + "properties": { + "plane": { "type": "object", "required": [ - "artifactId", - "id", "origin", - "type", - "units", - "value", "xAxis", "yAxis", "zAxis" ], "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, "origin": { "description": "Origin of the plane.", "allOf": [ @@ -142724,74 +136561,7 @@ ] }, "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", + "description": "What should the plane’s X axis be?", "allOf": [ { "$ref": "#/components/schemas/Point3d" @@ -142799,7 +136569,7 @@ ] }, "yAxis": { - "description": "What should the face's Y axis be?", + "description": "What should the plane’s Y axis be?", "allOf": [ { "$ref": "#/components/schemas/Point3d" @@ -142813,53 +136583,52 @@ "$ref": "#/components/schemas/Point3d" } ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] + }, + "additionalProperties": false + } + ], + "definitions": { + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] + "y": { + "type": "number", + "format": "double" }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] + "z": { + "type": "number", + "format": "double" } - ] - }, + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The plane (e.g. 'XY') which this new plane is created from.", + "labelRequired": false + }, + { + "name": "offset", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { "Point3d": { "type": "object", "required": [ @@ -142881,101 +136650,371 @@ "format": "double" } } - }, - "Solid": { + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Distance from the standard plane this new plane will be created at.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Plane", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Plane", + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Loft a square and a circle on the `XY` plane using offset.\nsquareSketch = startSketchOn(XY)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(XY, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", + "// Loft a square and a circle on the `XZ` plane using offset.\nsquareSketch = startSketchOn(XZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(XZ, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", + "// Loft a square and a circle on the `YZ` plane using offset.\nsquareSketch = startSketchOn(YZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(YZ, offset = 150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", + "// Loft a square and a circle on the `-XZ` plane using offset.\nsquareSketch = startSketchOn(-XZ)\n |> startProfileAt([-100, 200], %)\n |> line(end = [200, 0])\n |> line(end = [0, -200])\n |> line(end = [-200, 0])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = startSketchOn(offsetPlane(-XZ, offset = -150))\n |> circle(center = [0, 100], radius = 50)\n\nloft([squareSketch, circleSketch])", + "// A circle on the XY plane\nstartSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = 10, center = [0, 0])\n\n// Triangle on the plane 4 units above\nstartSketchOn(offsetPlane(XY, offset = 4))\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> close()" + ] + }, + { + "name": "patternCircular2d", + "summary": "Repeat a 2-dimensional sketch some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "sketchSet", + "type": "[Sketch]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Sketch", + "type": "array", + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "definitions": { + "Sketch": { "type": "object", "required": [ "artifactId", - "height", "id", - "sketch", - "units", - "value" + "on", + "originalId", + "paths", + "start", + "units" ], "properties": { "id": { - "description": "The id of the solid.", + "description": "The id of the sketch (this will change when the engine's reference to it changes).", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/SketchSurface" } ] }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", + "start": { + "description": "The starting path.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/BasePath" } ] }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "endCapId": { - "description": "The id of the extrusion end cap", + "originalId": { "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } + "format": "uuid" }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "Path": { + "description": "A path.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "ToPoint" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -142983,480 +137022,48 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } }, { - "description": "An extruded arc.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "extrudeArc" + "TangentialArcTo" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Whether or not to rotate the duplicates as they are copied.", - "labelRequired": true - }, - { - "name": "useOriginal", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, "from": { "description": "The from point.", @@ -144882,1633 +138489,1201 @@ } } }, - "required": false, - "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Sketch]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "required": true, + "includeInSnippet": true, + "description": "Which sketch(es) to pattern", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + "z": { + "type": "number", + "format": "double" + } } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)" - ] - }, - { - "name": "patternCircular3d", - "summary": "Repeat a 3-dimensional solid some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "solids", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { + }, "Solid": { "type": "object", "required": [ @@ -146577,10 +139752,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -146766,49 +139937,175 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "center", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { "Sketch": { "type": "object", "required": [ @@ -147717,6 +141014,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -147740,6 +141069,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -147893,6 +141233,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -147942,171 +141286,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Which solid(s) to pattern", - "labelRequired": false - }, - { - "name": "instances", - "type": "integer", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0.0, - "definitions": { "Solid": { "type": "object", "required": [ @@ -148175,10 +141354,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -148364,49 +141539,170 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The center about which to make the pattern. This is a 2D vector.", + "labelRequired": true + }, + { + "name": "arcDegrees", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { "Sketch": { "type": "object", "required": [ @@ -149315,6 +142611,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -149338,6 +142666,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -149491,6 +142830,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -149540,175 +142883,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "labelRequired": true - }, - { - "name": "axis", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_3_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3, - "definitions": { "Solid": { "type": "object", "required": [ @@ -149777,10 +142951,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -149966,49 +143136,169 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", + "labelRequired": true + }, + { + "name": "rotateDuplicates", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Boolean", + "type": "boolean", + "definitions": { "Sketch": { "type": "object", "required": [ @@ -150917,6 +144207,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -150940,6 +144262,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -151093,6 +144426,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -151142,175 +144479,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The axis around which to make the pattern. This is a 3D vector", - "labelRequired": true - }, - { - "name": "center", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_3_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3, - "definitions": { "Solid": { "type": "object", "required": [ @@ -151379,10 +144547,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -151568,49 +144732,170 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Whether or not to rotate the duplicates as they are copied.", + "labelRequired": true + }, + { + "name": "useOriginal", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { "Sketch": { "type": "object", "required": [ @@ -152519,6 +145804,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -152542,6 +145859,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -152695,6 +146023,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -152744,170 +146076,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The center about which to make the pattern. This is a 3D vector.", - "labelRequired": true - }, - { - "name": "arcDegrees", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double", - "definitions": { "Solid": { "type": "object", "required": [ @@ -152976,10 +146144,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -153165,1612 +146329,2050 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "A path that goes to a point.", + "description": "A fillet.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "edgeId", + "id", + "radius", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "fillet" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "radius": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "A chamfer.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "edgeId", + "id", + "length", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" + "chamfer" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "length": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "[Sketch]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Sketch", + "type": "array", + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([.5, 25], %)\n |> line(end = [0, 5])\n |> line(end = [-1, 0])\n |> line(end = [0, -5])\n |> close()\n |> patternCircular2d(\n center = [0, 0],\n instances = 13,\n arcDegrees = 360,\n rotateDuplicates = true,\n )\n\nexample = extrude(exampleSketch, length = 1)" + ] + }, + { + "name": "patternCircular3d", + "summary": "Repeat a 3-dimensional solid some number of times along a partial or complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "solids", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "SketchSurface": { - "description": "A sketch type.", + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { + "description": "An extrude plane.", "type": "object", "required": [ - "artifactId", + "faceId", "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" + "extrudePlane" ] }, - "id": { - "description": "The id of the plane.", + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", + "tag": { + "description": "The tag.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "value": { - "$ref": "#/components/schemas/PlaneType" + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "origin": { - "description": "Origin of the plane.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" ] }, - "yAxis": { - "description": "What should the plane's Y axis be?", + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", + "description": "Geometry metadata.", "type": "object", "required": [ - "artifactId", + "faceId", "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" + "chamfer" ] }, - "id": { - "description": "The id of the face.", + "faceId": { + "description": "The id for the chamfer surface.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", + "tag": { + "description": "The tag.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "value": { - "description": "The tag of the face.", - "type": "string" + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "xAxis": { - "description": "What should the face's X axis be?", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" ] }, - "zAxis": { - "description": "The z-axis (normal).", + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "solid": { - "description": "The solid the face is on.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } ] }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "TagDeclarator": { "type": "object", "required": [ - "x", - "y", - "z" + "value" ], "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" + "value": { + "type": "string" }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", - "labelRequired": true - }, - { - "name": "rotateDuplicates", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Boolean", - "type": "boolean", - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { + "digest": { "type": "array", "items": { "type": "integer", @@ -156089,17 +149691,18 @@ }, "required": true, "includeInSnippet": true, - "description": "Whether or not to rotate the duplicates as they are copied.", - "labelRequired": true + "description": "Which solid(s) to pattern", + "labelRequired": false }, { - "name": "useOriginal", - "type": "bool", + "name": "instances", + "type": "integer", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, "definitions": { "Solid": { "type": "object", @@ -157684,1702 +151287,1004 @@ } } }, - "required": false, - "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 1)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d(\n axis = [1, -1, 0],\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true,\n )" - ] - }, - { - "name": "patternLinear2d", - "summary": "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of distance between each repetition, some specified number of times.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "sketches", - "type": "[Sketch]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ { - "description": "A path that goes to a point.", + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -159392,7 +152297,7 @@ "type": { "type": "string", "enum": [ - "ToPoint" + "Base" ] }, "from": { @@ -159438,13 +152343,14 @@ } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ "__geoMeta", "ccw", "center", "from", + "radius", "to", "type", "units" @@ -159453,11 +152359,11 @@ "type": { "type": "string", "enum": [ - "TangentialArcTo" + "Arc" ] }, "center": { - "description": "the arc's center", + "description": "Center of the circle that this arc is drawn on.", "type": "array", "items": { "type": "number", @@ -159466,8 +152372,13 @@ "maxItems": 2, "minItems": 2 }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, "ccw": { - "description": "arc's direction", + "description": "True if the arc is counterclockwise.", "type": "boolean" }, "from": { @@ -159511,986 +152422,492 @@ ] } } - }, + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Mm" ] } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Cm" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "M" ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "Feet" ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" ] } } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "origin", "type", "units", - "x" + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "plane" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the plane's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the plane's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "An angled line to.", + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "solid", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "face" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The tag of the face.", + "type": "string" }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the face's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" } ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", + "zAxis": { + "description": "The z-axis (normal).", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "solid": { + "description": "The solid the face is on.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Solid" } ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 }, "units": { "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } } ] }, - "UnitLen": { - "description": "A unit of length.", + "PlaneType": { + "description": "Type for a plane.", "oneOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] }, { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] }, { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } ] }, - "TagDeclarator": { + "Point3d": { "type": "object", "required": [ - "value" + "x", + "y", + "z" ], "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "x": { + "type": "number", + "format": "double" }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "y": { + "type": "number", + "format": "double" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "z": { + "type": "number", + "format": "double" } } }, - "GeoMeta": { - "description": "Geometry metadata.", + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "id", - "sourceRange" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "sourceRange": { - "description": "The source range.", + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } }, - "SketchSurface": { - "description": "A sketch type.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { + "description": "A fillet.", "type": "object", "required": [ - "artifactId", + "edgeId", "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "radius", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" + "fillet" ] }, "id": { - "description": "The id of the plane.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "radius": { + "type": "number", + "format": "double" }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" }, - "zAxis": { - "description": "The z-axis (normal).", + "tag": { "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ], + "nullable": true } } }, { - "description": "A face.", + "description": "A chamfer.", "type": "object", "required": [ - "artifactId", + "edgeId", "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "length", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" + "chamfer" ] }, "id": { - "description": "The id of the face.", + "description": "The id of the engine command that called this chamfer.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "length": { + "type": "number", + "format": "double" }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" }, - "solid": { - "description": "The solid the face is on.", + "tag": { "allOf": [ { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ], + "nullable": true } } } ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis around which to make the pattern. This is a 3D vector", + "labelRequired": true + }, + { + "name": "center", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, + "definitions": { "Solid": { "type": "object", "required": [ @@ -160559,6 +152976,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -160744,171 +153165,49 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The sketch(es) to duplicate", - "labelRequired": false - }, - { - "name": "instances", - "type": "integer", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0.0, - "definitions": { + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -161817,38 +154116,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -161872,17 +154139,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -162036,10 +154292,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -162089,6 +154341,170 @@ } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The center about which to make the pattern. This is a 3D vector.", + "labelRequired": true + }, + { + "name": "arcDegrees", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { "Solid": { "type": "object", "required": [ @@ -162157,6 +154573,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -162342,170 +154762,49 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "labelRequired": true - }, - { - "name": "distance", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double", - "definitions": { + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -163414,38 +155713,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -163469,17 +155736,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -163633,10 +155889,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -163686,6 +155938,169 @@ } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0.", + "labelRequired": true + }, + { + "name": "rotateDuplicates", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Boolean", + "type": "boolean", + "definitions": { "Solid": { "type": "object", "required": [ @@ -163754,6 +156169,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -163939,175 +156358,49 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Distance between each repetition. Also known as 'spacing'.", - "labelRequired": true - }, - { - "name": "axis", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2, - "definitions": { + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -165016,38 +157309,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -165071,17 +157332,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -165235,10 +157485,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -165288,6 +157534,170 @@ } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Whether or not to rotate the duplicates as they are copied.", + "labelRequired": true + }, + { + "name": "useOriginal", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { "Solid": { "type": "object", "required": [ @@ -165356,6 +157766,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -165541,170 +157955,49 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The axis of the pattern. A 2D vector.", - "labelRequired": true - }, - { - "name": "useOriginal", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -166613,38 +158906,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -166668,17 +158929,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -166832,10 +159082,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -166885,258 +159131,68 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", + "from": { + "description": "The from point.", "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/EdgeCut" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, "units": { "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "nullable": true }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } - } + ] } - ] + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -167222,69 +159278,6 @@ } } ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } } } }, @@ -167295,15 +159288,315 @@ ], "returnValue": { "name": "", - "type": "[Sketch]", + "type": "[Solid]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", + "title": "Array_of_Solid", "type": "array", "items": { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/Solid" }, "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -168212,38 +160505,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -168267,17 +160528,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -168431,10 +160681,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -168484,258 +160730,68 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", + "from": { + "description": "The from point.", "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/EdgeCut" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, "units": { "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "nullable": true }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } - } + ] } - ] + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -168821,69 +160877,6 @@ } } ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } } } }, @@ -168894,327 +160887,27 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 1)\n |> patternLinear2d(axis = [1, 0], instances = 7, distance = 4)\n\nexample = extrude(exampleSketch, length = 1)" + "exampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 1)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d(\n axis = [1, -1, 0],\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true,\n )" ] }, { - "name": "patternLinear3d", - "summary": "Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times.", - "description": "///", + "name": "patternLinear2d", + "summary": "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of distance between each repetition, some specified number of times.", + "description": "", "tags": [], "keywordArguments": true, "args": [ { - "name": "solids", - "type": "[Solid]", + "name": "sketches", + "type": "[Sketch]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", + "title": "Array_of_Sketch", "type": "array", "items": { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/Sketch" }, "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "Sketch": { "type": "object", "required": [ @@ -170123,6 +161816,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -170146,6 +161871,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -170299,6 +162035,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -170348,171 +162088,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solid(s) to duplicate", - "labelRequired": false - }, - { - "name": "instances", - "type": "integer", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0.0, - "definitions": { "Solid": { "type": "object", "required": [ @@ -170581,10 +162156,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -170770,49 +162341,171 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The sketch(es) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { "Sketch": { "type": "object", "required": [ @@ -171721,6 +163414,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -171744,6 +163469,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -171897,6 +163633,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -171946,170 +163686,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "labelRequired": true - }, - { - "name": "distance", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double", - "definitions": { "Solid": { "type": "object", "required": [ @@ -172178,10 +163754,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -172367,49 +163939,170 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "distance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double", + "definitions": { "Sketch": { "type": "object", "required": [ @@ -173318,6 +165011,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -173341,6 +165066,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -173494,6 +165230,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -173543,175 +165283,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Distance between each repetition. Also known as 'spacing'.", - "labelRequired": true - }, - { - "name": "axis", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_3_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3, - "definitions": { "Solid": { "type": "object", "required": [ @@ -173780,10 +165351,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -173969,49 +165536,175 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "Distance between each repetition. Also known as 'spacing'.", + "labelRequired": true + }, + { + "name": "axis", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { "Sketch": { "type": "object", "required": [ @@ -174920,6 +166613,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -174943,6 +166668,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -175096,6 +166832,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -175145,170 +166885,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The axis of the pattern. A 2D vector.", - "labelRequired": true - }, - { - "name": "useOriginal", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { "Solid": { "type": "object", "required": [ @@ -175377,10 +166953,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -175566,49 +167138,170 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The axis of the pattern. A 2D vector.", + "labelRequired": true + }, + { + "name": "useOriginal", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { "Sketch": { "type": "object", "required": [ @@ -176517,6 +168210,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -176540,6 +168265,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -176693,6 +168429,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -176742,68 +168482,258 @@ } } }, - "BasePath": { - "description": "A base path.", + "Solid": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "artifactId", + "height", + "id", + "sketch", + "units", + "value" ], "properties": { - "from": { - "description": "The from point.", + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/ExtrudeSurface" + } }, - "to": { - "description": "The to point.", + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/EdgeCut" + } }, "units": { "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" ], - "nullable": true + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + } } - } + ] }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -176889,6 +168819,69 @@ } } ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } } } }, @@ -176899,315 +168892,15 @@ ], "returnValue": { "name": "", - "type": "[Solid]", + "type": "[Sketch]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", + "title": "Array_of_Sketch", "type": "array", "items": { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/Sketch" }, "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "Sketch": { "type": "object", "required": [ @@ -178116,6 +169809,38 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -178139,6 +169864,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -178292,6 +170028,10 @@ } ] }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -178341,68 +170081,258 @@ } } }, - "BasePath": { - "description": "A base path.", + "Solid": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "artifactId", + "height", + "id", + "sketch", + "units", + "value" ], "properties": { - "from": { - "description": "The from point.", + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/ExtrudeSurface" + } }, - "to": { - "description": "The to point.", + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/EdgeCut" + } }, "units": { "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" ], - "nullable": true + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + } } - } + ] }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -178488,6 +170418,69 @@ } } ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } } } }, @@ -178498,15 +170491,13 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", - "// Pattern a whole sketch on face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n // We pass in the \"case\" here since we want to pattern the whole sketch.\n// And the case was the base of the sketch.\npatternLinear3d(\n case,\n axis = [1, 0, 0],\n distance = 250,\n instances = 2,\n)", - "// Pattern an object on a face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face.\npatternLinear3d(\n thing1,\n axis = [1, 0, 0],\n distance = size,\n instances = 2,\n useOriginal = true,\n)" + "exampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 1)\n |> patternLinear2d(axis = [1, 0], instances = 7, distance = 4)\n\nexample = extrude(exampleSketch, length = 1)" ] }, { - "name": "patternTransform", - "summary": "Repeat a 3-dimensional solid, changing it each time.", - "description": "Replicates the 3D solid, applying a transformation function to each replica. Transformation function could alter rotation, scale, visibility, position, etc.\n\nThe `patternTransform` call itself takes a number for how many total instances of the shape should be. For example, if you use a circle with `patternTransform(instances = 4, transform = f)` then there will be 4 circles: the original, and 3 created by replicating the original and calling the transform function on each.\n\nThe transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.\n\nThe transform function returns a transform object. All properties of the object are optional, they each default to \"no change\". So the overall transform object defaults to \"no change\" too. Its properties are:\n\n - `translate` (3D point)\n\n Translates the replica, moving its position in space.\n\n - `replicate` (bool)\n\n If false, this ID will not actually copy the object. It'll be skipped.\n\n - `scale` (3D point)\n\n Stretches the object, multiplying its width in the given dimension by the point's component in that direction.\n\n - `rotation` (object, with the following properties)\n\n - `rotation.axis` (a 3D point, defaults to the Z axis)\n\n - `rotation.angle` (number of degrees)\n\n - `rotation.origin` (either \"local\" i.e. rotate around its own center, \"global\" i.e. rotate around the scene's center, or a 3D point, defaults to \"local\")", + "name": "patternLinear3d", + "summary": "Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times.", + "description": "///", "tags": [], "keywordArguments": true, "args": [ @@ -181708,12 +173699,13 @@ "labelRequired": true }, { - "name": "transform", - "type": "FunctionSource", + "name": "distance", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "FunctionSource", - "type": "null", + "title": "double", + "type": "number", + "format": "double", "definitions": { "Solid": { "type": "object", @@ -183300,17 +175292,22 @@ }, "required": true, "includeInSnippet": true, - "description": "How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.", + "description": "Distance between each repetition. Also known as 'spacing'.", "labelRequired": true }, { - "name": "useOriginal", - "type": "bool", + "name": "axis", + "type": "[number]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, + "title": "Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, "definitions": { "Solid": { "type": "object", @@ -184895,1707 +176892,999 @@ } } }, - "required": false, - "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", + "required": true, + "includeInSnippet": true, + "description": "The axis of the pattern. A 2D vector.", "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + }, + { + "name": "useOriginal", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0, 0] }\n}\n\n// Sketch 4 cylinders.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", - "// Each instance will be shifted along the X axis,\n// with a gap between the original (at x = 0) and the first replica\n// (at x = 8). This is because `id` starts at 1.\nfn transform(id) {\n return { translate = [4 * (1 + id), 0, 0] }\n}\n\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", - "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n // Move down each time.\n translate = [0, 0, -i * width],\n // Make the cube longer, wider and flatter each time.\n scale = [pow(1.1, i), pow(1.1, i), pow(0.9, i)],\n // Turn by 15 degrees each time.\n rotation = { angle = 15 * i, origin = \"local\" }\n }\n}\n\nmyCubes = cube(width, [100, 0])\n |> patternTransform(instances = 25, transform = transform)", - "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n translate = [0, 0, -i * width],\n rotation = {\n angle = 90 * i,\n // Rotate around the overall scene's origin.\n origin = \"global\"\n }\n }\n}\nmyCubes = cube(width, [100, 100])\n |> patternTransform(instances = 4, transform = transform)", - "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(replicaId) {\n scale = r * abs(1 - (t * replicaId)) * (5 + cos(replicaId / 8))\n return {\n translate = [0, 0, replicaId * 10],\n scale = [scale, scale, 0]\n }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer() {\n return startSketchOn(XY)\n // or some other plane idk\n |> circle(center = [0, 0], radius = 1, tag = $tag1)\n |> extrude(length = h)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n |> patternTransform(instances = 100, transform = transform)", - "fn transform(i) {\n // Transform functions can return multiple transforms. They'll be applied in order.\n return [\n { translate = [30 * i, 0, 0] },\n { rotation = { angle = 45 * i } }\n ]\n}\nstartSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> polygon({\n radius = 10,\n numSides = 4,\n center = [0, 0],\n inscribed = false\n }, %)\n |> extrude(length = 4)\n |> patternTransform(instances = 3, transform = transform)" - ] - }, - { - "name": "patternTransform2d", - "summary": "Just like patternTransform, but works on 2D sketches not 3D solids.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "sketches", - "type": "[Sketch]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ { - "description": "A path that goes to a point.", + "description": "A base path.", "type": "object", "required": [ "__geoMeta", @@ -186608,7 +177897,7 @@ "type": { "type": "string", "enum": [ - "ToPoint" + "Base" ] }, "from": { @@ -186654,13 +177943,14 @@ } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ "__geoMeta", "ccw", "center", "from", + "radius", "to", "type", "units" @@ -186669,11 +177959,11 @@ "type": { "type": "string", "enum": [ - "TangentialArcTo" + "Arc" ] }, "center": { - "description": "the arc's center", + "description": "Center of the circle that this arc is drawn on.", "type": "array", "items": { "type": "number", @@ -186682,8 +177972,13 @@ "maxItems": 2, "minItems": 2 }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, "ccw": { - "description": "arc's direction", + "description": "True if the arc is counterclockwise.", "type": "boolean" }, "from": { @@ -186727,881 +178022,222 @@ ] } } - }, + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Mm" ] } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Cm" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "M" ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "Feet" ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" ] } } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "origin", "type", "units", - "x" + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "plane" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the plane's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the plane's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "An angled line to.", + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "solid", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "face" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, "artifactId": { "description": "The artifact ID.", @@ -187654,10 +178290,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -187707,258 +178339,68 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", + "from": { + "description": "The from point.", "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/EdgeCut" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, "units": { "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "nullable": true }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } - } + ] } - ] + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -188044,611 +178486,1736 @@ } } ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } } } }, - "required": true, - "includeInSnippet": true, - "description": "The sketch(es) to duplicate", - "labelRequired": false - }, - { - "name": "instances", - "type": "integer", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0.0, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 2])\n |> line(end = [3, 1])\n |> line(end = [0, -4])\n |> close()\n\nexample = extrude(exampleSketch, length = 1)\n |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6)", + "// Pattern a whole sketch on face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n // We pass in the \"case\" here since we want to pattern the whole sketch.\n// And the case was the base of the sketch.\npatternLinear3d(\n case,\n axis = [1, 0, 0],\n distance = 250,\n instances = 2,\n)", + "// Pattern an object on a face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face.\npatternLinear3d(\n thing1,\n axis = [1, 0, 0],\n distance = size,\n instances = 2,\n useOriginal = true,\n)" + ] + }, + { + "name": "patternTransform", + "summary": "Repeat a 3-dimensional solid, changing it each time.", + "description": "Replicates the 3D solid, applying a transformation function to each replica. Transformation function could alter rotation, scale, visibility, position, etc.\n\nThe `patternTransform` call itself takes a number for how many total instances of the shape should be. For example, if you use a circle with `patternTransform(instances = 4, transform = f)` then there will be 4 circles: the original, and 3 created by replicating the original and calling the transform function on each.\n\nThe transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.\n\nThe transform function returns a transform object. All properties of the object are optional, they each default to \"no change\". So the overall transform object defaults to \"no change\" too. Its properties are:\n\n - `translate` (3D point)\n\n Translates the replica, moving its position in space.\n\n - `replicate` (bool)\n\n If false, this ID will not actually copy the object. It'll be skipped.\n\n - `scale` (3D point)\n\n Stretches the object, multiplying its width in the given dimension by the point's component in that direction.\n\n - `rotation` (object, with the following properties)\n\n - `rotation.axis` (a 3D point, defaults to the Z axis)\n\n - `rotation.angle` (number of degrees)\n\n - `rotation.origin` (either \"local\" i.e. rotate around its own center, \"global\" i.e. rotate around the scene's center, or a 3D point, defaults to \"local\")", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "solids", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "extrudePlane" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -188656,64 +180223,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A path that is horizontal.", + "description": "An extruded arc.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "extrudeArc" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -188721,129 +180268,89 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "An angled line to.", + "description": "Geometry metadata.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "chamfer" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], "nullable": true }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "__geoMeta": { - "description": "Metadata.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A base path.", + "description": "Geometry metadata.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "fillet" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -188851,92 +180358,16 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "uuid" }, - "__geoMeta": { - "description": "Metadata.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } @@ -188944,95 +180375,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, "TagDeclarator": { "type": "object", "required": [ @@ -189065,29 +180407,6 @@ } } }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, "SourceRange": { "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", "type": "array", @@ -189099,628 +180418,6 @@ "maxItems": 3, "minItems": 3 }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", - "labelRequired": true - }, - { - "name": "transform", - "type": "FunctionSource", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "FunctionSource", - "type": "null", - "definitions": { "Sketch": { "type": "object", "required": [ @@ -190629,38 +181326,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -190684,17 +181349,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -190848,10 +181502,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -190901,124 +181551,248 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "description": "The extrude surfaces.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "sketch": { - "description": "The sketch.", + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", + ], "nullable": true }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this chamfer.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The solid(s) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ { - "description": "An extruded arc.", + "description": "An extrude plane.", "type": "object", "required": [ "faceId", @@ -191030,7 +181804,7 @@ "type": { "type": "string", "enum": [ - "extrudeArc" + "extrudePlane" ] }, "faceId": { @@ -191063,7 +181837,7 @@ } }, { - "description": "Geometry metadata.", + "description": "An extruded arc.", "type": "object", "required": [ "faceId", @@ -191075,11 +181849,11 @@ "type": { "type": "string", "enum": [ - "chamfer" + "extrudeArc" ] }, "faceId": { - "description": "The id for the chamfer surface.", + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, @@ -191120,11 +181894,11 @@ "type": { "type": "string", "enum": [ - "fillet" + "chamfer" ] }, "faceId": { - "description": "The id for the fillet surface.", + "description": "The id for the chamfer surface.", "type": "string", "format": "uuid" }, @@ -191151,19 +181925,14 @@ ] } } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ + }, { - "description": "A fillet.", + "description": "Geometry metadata.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "radius", + "sourceRange", "type" ], "properties": { @@ -191173,151 +181942,80 @@ "fillet" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", + "faceId": { + "description": "The id for the fillet surface.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] }, "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "tag": { + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/SourceRange" } - ], - "nullable": true + ] } } } ] }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.", - "labelRequired": true - }, - { - "name": "useOriginal", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -192226,38 +182924,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -192281,17 +182947,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -192445,10 +183100,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -192498,6 +183149,169 @@ } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "transform", + "type": "FunctionSource", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "FunctionSource", + "type": "null", + "definitions": { "Solid": { "type": "object", "required": [ @@ -192566,6 +183380,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -192751,1862 +183569,980 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", "oneOf": [ { - "description": "A fillet.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "edgeId", - "id", - "radius", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "ToPoint" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "radius": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "A chamfer.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "edgeId", - "id", - "length", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "length": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": false, - "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Sketch]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + ] }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0] }\n}\n\n// Sketch 4 circles.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> patternTransform2d(instances = 4, transform = transform)" - ] - }, - { - "name": "pi", - "summary": "Return the value of `pi`. Archimedes’ constant (π).", - "description": "**DEPRECATED** use the constant PI", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": true, - "examples": [ - "circumference = 70\n\nexampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = circumference / (2 * pi()))\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "polygon", - "summary": "Create a regular polygon with the specified number of sides that is either inscribed or circumscribed around a circle of the specified radius.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "data", - "type": "PolygonData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "PolygonData", - "description": "Data for drawing a polygon", - "type": "object", - "required": [ - "center", - "numSides", - "radius" - ], - "properties": { - "radius": { - "description": "The radius of the polygon", - "type": "number", - "format": "double" - }, - "numSides": { - "description": "The number of sides in the polygon", - "type": "integer", - "format": "uint64", - "minimum": 0.0 - }, - "center": { - "description": "The center point of the polygon", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "inscribed": { - "description": "Whether the polygon is inscribed (true) or circumscribed (false) about a circle with the specified radius", - "default": true, - "type": "boolean" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "sketchSurfaceOrGroup", - "type": "SketchOrSurface", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SketchOrSurface", - "description": "A sketch surface or a sketch.", - "anyOf": [ - { - "$ref": "#/components/schemas/SketchSurface" }, - { - "$ref": "#/components/schemas/Sketch" - } - ], - "definitions": { "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -194760,10 +184696,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -194813,95 +184745,170 @@ } } }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } + "units": { + "$ref": "#/components/schemas/UnitLen" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } + ], + "nullable": true }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ { + "description": "A fillet.", "type": "object", "required": [ + "edgeId", + "id", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Feet" + "fillet" ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } } }, { + "description": "A chamfer.", "type": "object", "required": [ + "edgeId", + "id", + "length", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Yards" + "chamfer" ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } } } ] - }, + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.", + "labelRequired": true + }, + { + "name": "useOriginal", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { "Solid": { "type": "object", "required": [ @@ -194970,6 +184977,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -196017,196 +186028,118 @@ } ] }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - ] - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } + { + "type": "object", + "required": [ + "type" ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ + } + }, { - "description": "A fillet.", "type": "object", "required": [ - "edgeId", - "id", - "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "Inches" ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true } } }, { - "description": "A chamfer.", "type": "object", "required": [ - "edgeId", - "id", - "length", "type" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "Feet" ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "enum": [ + "Yards" + ] } } } ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "tag", - "type": "TagNode", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true, - "definitions": { + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -196360,10 +186293,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -196413,263 +186342,119 @@ } } }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } + "units": { + "$ref": "#/components/schemas/UnitLen" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - }, - { - "type": "object", - "required": [ - "type" ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } + "nullable": true }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } - } + ] } - ] + } }, - "Solid": { + "TagIdentifier": { "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "type": "string" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] + "radius": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The face id for the extrude plane.", + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } }, { - "description": "Geometry metadata.", + "description": "A chamfer.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "length", "type" ], "properties": { @@ -196679,1190 +186464,414 @@ "chamfer" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this chamfer.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] + "length": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The id for the fillet surface.", + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } } ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + } + } + }, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": false, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { "Path": { "description": "A path.", "oneOf": [ @@ -198707,38 +187716,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -198762,17 +187739,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -198926,10 +187892,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -198979,331 +187941,14 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" + "__geoMeta", + "from", + "to", + "units" ], "properties": { "from": { @@ -199453,638 +188098,845 @@ "unpublished": false, "deprecated": false, "examples": [ - "// Create a regular hexagon inscribed in a circle of radius 10\nhex = startSketchOn(XY)\n |> polygon({\n radius = 10,\n numSides = 6,\n center = [0, 0],\n inscribed = true\n }, %)\n\nexample = extrude(hex, length = 5)", - "// Create a square circumscribed around a circle of radius 5\nsquare = startSketchOn(XY)\n |> polygon({\n radius = 5.0,\n numSides = 4,\n center = [10, 10],\n inscribed = false\n }, %)\nexample = extrude(square, length = 5)" + "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0, 0] }\n}\n\n// Sketch 4 cylinders.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", + "// Each instance will be shifted along the X axis,\n// with a gap between the original (at x = 0) and the first replica\n// (at x = 8). This is because `id` starts at 1.\nfn transform(id) {\n return { translate = [4 * (1 + id), 0, 0] }\n}\n\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 5)\n |> patternTransform(instances = 4, transform = transform)", + "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n // Move down each time.\n translate = [0, 0, -i * width],\n // Make the cube longer, wider and flatter each time.\n scale = [pow(1.1, i), pow(1.1, i), pow(0.9, i)],\n // Turn by 15 degrees each time.\n rotation = { angle = 15 * i, origin = \"local\" }\n }\n}\n\nmyCubes = cube(width, [100, 0])\n |> patternTransform(instances = 25, transform = transform)", + "fn cube(length, center) {\n l = length / 2\n x = center[0]\n y = center[1]\n p0 = [-l + x, -l + y]\n p1 = [-l + x, l + y]\n p2 = [l + x, l + y]\n p3 = [l + x, -l + y]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> line(endAbsolute = p0)\n |> close()\n |> extrude(length = length)\n}\n\nwidth = 20\nfn transform(i) {\n return {\n translate = [0, 0, -i * width],\n rotation = {\n angle = 90 * i,\n // Rotate around the overall scene's origin.\n origin = \"global\"\n }\n }\n}\nmyCubes = cube(width, [100, 100])\n |> patternTransform(instances = 4, transform = transform)", + "// Parameters\nr = 50 // base radius\nh = 10 // layer height\nt = 0.005 // taper factor [0-1)\n// Defines how to modify each layer of the vase.\n// Each replica is shifted up the Z axis, and has a smoothly-varying radius\nfn transform(replicaId) {\n scale = r * abs(1 - (t * replicaId)) * (5 + cos(replicaId / 8))\n return {\n translate = [0, 0, replicaId * 10],\n scale = [scale, scale, 0]\n }\n}\n// Each layer is just a pretty thin cylinder.\nfn layer() {\n return startSketchOn(XY)\n // or some other plane idk\n |> circle(center = [0, 0], radius = 1, tag = $tag1)\n |> extrude(length = h)\n}\n// The vase is 100 layers tall.\n// The 100 layers are replica of each other, with a slight transformation applied to each.\nvase = layer()\n |> patternTransform(instances = 100, transform = transform)", + "fn transform(i) {\n // Transform functions can return multiple transforms. They'll be applied in order.\n return [\n { translate = [30 * i, 0, 0] },\n { rotation = { angle = 45 * i } }\n ]\n}\nstartSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> polygon({\n radius = 10,\n numSides = 4,\n center = [0, 0],\n inscribed = false\n }, %)\n |> extrude(length = 4)\n |> patternTransform(instances = 3, transform = transform)" ] }, { - "name": "pop", - "summary": "Remove the last element from an array.", - "description": "Returns a new array with the last element removed.", + "name": "patternTransform2d", + "summary": "Just like patternTransform, but works on 2D sketches not 3D solids.", + "description": "", "tags": [], "keywordArguments": true, "args": [ { - "name": "array", - "type": "[KclValue]", + "name": "sketches", + "type": "[Sketch]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_KclValue", + "title": "Array_of_Sketch", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" + "$ref": "#/components/schemas/Sketch" }, "definitions": { - "KclValue": { - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ { + "description": "A path that goes to a point.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Bool" + "ToPoint" ] }, - "value": { - "type": "boolean" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "ty", + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Number" + "TangentialArcTo" ] }, - "value": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "ty": { - "$ref": "#/components/schemas/NumericType" + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "String" + "TangentialArc" ] }, - "value": { - "type": "string" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "a complete arc", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "MixedArray" + "Circle" ] }, - "value": { + "center": { + "description": "the arc's center", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "HomArray" + "CircleThreePoint" ] }, - "value": { + "p1": { + "description": "Point 1 of the circle", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Object" + "ArcThreePoint" ] }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A path that is horizontal.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "TagIdentifier" + "Horizontal" ] }, - "value": { - "type": "string" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "An angled line to.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "TagDeclarator" + "AngledLineTo" ] }, - "value": { - "type": "string" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true }, - "digest": { + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Plane" + "Base" ] }, - "value": { - "$ref": "#/components/schemas/Plane" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Face" + "Arc" ] }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/Helix" - } - } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" }, - "value": { - "description": "The original file paths.", + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } + "units": { + "$ref": "#/components/schemas/UnitLen" }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, + "tag": { + "description": "The tag of the path.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } + "$ref": "#/components/schemas/TagDeclarator" } ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } - } + "nullable": true }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] + "$ref": "#/components/schemas/GeoMeta" } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] - } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" - ] - }, - "len": { - "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" ] } } @@ -200180,105 +189032,225 @@ } ] }, - "UnitAngle": { - "description": "A unit of angle.", + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "type": "object", "required": [ - "type" + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Degrees" + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { + "description": "A face.", "type": "object", "required": [ - "type" + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "Radians" + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } } ] }, - "Plane": { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "ArtifactId": { "type": "string", "format": "uuid" @@ -200332,74 +189304,6 @@ } } }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "Solid": { "type": "object", "required": [ @@ -200653,49 +189557,171 @@ } ] }, - "TagDeclarator": { + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "to": { + "description": "The to point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The sketch(es) to duplicate", + "labelRequired": false + }, + { + "name": "instances", + "type": "integer", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "uint32", + "type": "integer", + "format": "uint32", + "minimum": 0.0, + "definitions": { "Sketch": { "type": "object", "required": [ @@ -201515,130 +190541,262 @@ } ] }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", + "UnitLen": { + "description": "A unit of length.", "oneOf": [ { "type": "object", "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "Mm" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", "type": "object", "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" + "Cm" ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, "artifactId": { "description": "The artifact ID.", @@ -201691,68 +190849,311 @@ } ] }, - "BasePath": { - "description": "A base path.", + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "x", + "y", + "z" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "x": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "y": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" }, - "tag": { - "description": "The tag of the path.", + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Sketch" } ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } } - } + ] }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -201839,76 +191240,66 @@ } ] }, - "Helix": { - "description": "A helix.", + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "artifactId": { - "description": "The artifact ID.", + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", + ], "nullable": true }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "TagIdentifier": { "type": "object", + "required": [ + "value" + ], "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "value": { + "type": "string" } } } @@ -201916,3075 +191307,2248 @@ }, "required": true, "includeInSnippet": true, - "description": "The array to pop from. Must not be empty.", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "KclValue", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "KclValue", - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" - } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" + "description": "The number of total instances. Must be greater than or equal to 1. This includes the original entity. For example, if instances is 2, there will be two copies -- the original, and one new copy. If instances is 1, this has no effect.", + "labelRequired": true + }, + { + "name": "transform", + "type": "FunctionSource", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "FunctionSource", + "type": "null", + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" - } - } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] - }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ], - "definitions": { - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } - }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] - } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" - ] - }, - "len": { - "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - } - } - ] - }, - "KclValue": { - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" - } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" - } - } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] - }, - "value": { - "$ref": "#/components/schemas/KclNone" - } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "Plane": { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + } + }, + "required": true, + "includeInSnippet": true, + "description": "How each replica should be transformed. The transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.", + "labelRequired": true + }, + { + "name": "useOriginal", + "type": "bool", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "arr = [1, 2, 3, 4]\nnew_arr = pop(arr)\nassertEqual(new_arr[0], 1, 0.00001, \"1 is the first element of the array\")\nassertEqual(new_arr[1], 2, 0.00001, \"2 is the second element of the array\")\nassertEqual(new_arr[2], 3, 0.00001, \"3 is the third element of the array\")" - ] - }, - { - "name": "pow", - "summary": "Compute the number to a power.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "pow", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = pow(5, 2))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "profileStart", - "summary": "Extract the provided 2-dimensional sketch's profile's origin value.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "format": "double", + "nullable": true }, "from": { "description": "The from point.", @@ -205029,12 +193593,10 @@ } }, { - "description": "A arc that is tangential to the last path segment", + "description": "A base path.", "type": "object", "required": [ "__geoMeta", - "ccw", - "center", "from", "to", "type", @@ -205044,23 +193606,9 @@ "type": { "type": "string", "enum": [ - "TangentialArc" + "Base" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, "from": { "description": "The from point.", "type": "array", @@ -205104,7 +193652,7 @@ } }, { - "description": "a complete arc", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ "__geoMeta", @@ -205120,11 +193668,11 @@ "type": { "type": "string", "enum": [ - "Circle" + "Arc" ] }, "center": { - "description": "the arc's center", + "description": "Center of the circle that this arc is drawn on.", "type": "array", "items": { "type": "number", @@ -205134,12 +193682,12 @@ "minItems": 2 }, "radius": { - "description": "the arc's radius", + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", + "description": "True if the arc is counterclockwise.", "type": "boolean" }, "from": { @@ -205183,552 +193731,92 @@ ] } } - }, + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Mm" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Cm" ] } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "M" ] } } }, { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Inches" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "Feet" ] } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" + "Yards" ] } } @@ -206260,133 +194348,6 @@ } ] }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, "EdgeCut": { "description": "A fillet or a chamfer.", "oneOf": [ @@ -206471,1173 +194432,1927 @@ } } ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } } } }, - "required": true, - "includeInSnippet": true, + "required": false, + "description": "If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. Defaults to false.", "labelRequired": true } ], "returnValue": { "name": "", - "type": "[number]", + "type": "[Sketch]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_double", + "title": "Array_of_Sketch", "type": "array", "items": { - "type": "number", - "format": "double" + "$ref": "#/components/schemas/Sketch" }, - "maxItems": 2, - "minItems": 2 - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = 120, length = 50, tag = $seg01)\n |> angledLine(angle = segAng(seg01) + 120, length = 50)\n |> line(end = profileStart(%))\n |> close()\n |> extrude(length = 20)" - ] - }, - { - "name": "profileStartX", - "summary": "Extract the provided 2-dimensional sketch's profile's origin's 'x' value.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Each instance will be shifted along the X axis.\nfn transform(id) {\n return { translate = [4 * id, 0] }\n}\n\n// Sketch 4 circles.\nsketch001 = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 2)\n |> patternTransform2d(instances = 4, transform = transform)" + ] + }, + { + "name": "pi", + "summary": "Return the value of `pi`. Archimedes’ constant (π).", + "description": "**DEPRECATED** use the constant PI", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": true, + "examples": [ + "circumference = 70\n\nexampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = circumference / (2 * pi()))\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "polygon", + "summary": "Create a regular polygon with the specified number of sides that is either inscribed or circumscribed around a circle of the specified radius.", + "description": "", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "data", + "type": "PolygonData", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "PolygonData", + "description": "Data for drawing a polygon", + "type": "object", + "required": [ + "center", + "numSides", + "radius" + ], + "properties": { + "radius": { + "description": "The radius of the polygon", + "type": "number", + "format": "double" + }, + "numSides": { + "description": "The number of sides in the polygon", + "type": "integer", + "format": "uint64", + "minimum": 0.0 + }, + "center": { + "description": "The center point of the polygon", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "inscribed": { + "description": "Whether the polygon is inscribed (true) or circumscribed (false) about a circle with the specified radius", + "default": true, + "type": "boolean" + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "sketchSurfaceOrGroup", + "type": "SketchOrSurface", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SketchOrSurface", + "description": "A sketch surface or a sketch.", + "anyOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + }, + { + "$ref": "#/components/schemas/Sketch" + } + ], + "definitions": { + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } ] @@ -207695,6 +196410,95 @@ } } }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "Solid": { "type": "object", "required": [ @@ -207948,6 +196752,49 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -208012,256 +196859,6 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = -26.6, length = 50)\n |> angledLine(angle = 90, length = 50)\n |> angledLine(angle = 30, endAbsoluteX = profileStartX(%))" - ] - }, - { - "name": "profileStartY", - "summary": "Extract the provided 2-dimensional sketch's profile's origin's 'y' value.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { "Path": { "description": "A path.", "oneOf": [ @@ -209017,127 +197614,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -209161,17 +197637,173 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "tag", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -209378,6 +198010,95 @@ } } }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "Solid": { "type": "object", "required": [ @@ -209631,6 +198352,49 @@ } ] }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "Sketch": { "type": "object", "required": [ @@ -209695,1291 +198459,897 @@ } } }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "Path": { + "description": "A path.", "oneOf": [ { - "description": "A fillet.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "edgeId", - "id", - "radius", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "ToPoint" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "radius": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "A chamfer.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "edgeId", - "id", - "length", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "length": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = -60, length = 14)\n |> angledLine(angle = 30, endAbsoluteY = profileStartY(%))" - ] - }, - { - "name": "push", - "summary": "Append an element to the end of an array.", - "description": "Returns a new array with the element appended.", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "array", - "type": "[KclValue]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_KclValue", - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - }, - "definitions": { - "KclValue": { - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] }, - "value": { - "type": "string", - "format": "uuid" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Bool" + "TangentialArc" ] }, - "value": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "a complete arc", "type": "object", "required": [ - "ty", + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Number" + "Circle" ] }, - "value": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "HomArray" + "CircleThreePoint" ] }, - "value": { + "p1": { + "description": "Point 1 of the circle", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Object" + "ArcThreePoint" ] }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A path that is horizontal.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "TagIdentifier" + "Horizontal" ] }, - "value": { - "type": "string" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "An angled line to.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "TagDeclarator" + "AngledLineTo" ] }, - "value": { - "type": "string" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true }, - "digest": { + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Plane" + "Base" ] }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "value": { - "$ref": "#/components/schemas/Solid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "value": { - "$ref": "#/components/schemas/Helix" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "Data for an imported geometry.", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "id", + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "ImportedGeometry" + "Arc" ] }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "description": "The original file paths.", + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } + "units": { + "$ref": "#/components/schemas/UnitLen" }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, + "tag": { + "description": "The tag of the path.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } + "$ref": "#/components/schemas/TagDeclarator" } ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } - } + "nullable": true }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] + "$ref": "#/components/schemas/GeoMeta" } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] - } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" - ] - }, - "len": { - "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" ] } } } ] }, - "Plane": { + "GeoMeta": { + "description": "Geometry metadata.", "type": "object", "required": [ - "artifactId", "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "sourceRange" ], "properties": { "id": { - "description": "The id of the plane.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" } } }, - "Face": { - "description": "A face.", + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "zAxis": { - "description": "The z-axis (normal).", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "solid": { - "description": "The solid the face is on.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "Solid": { + "TagIdentifier": { "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "type": "string" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] + "radius": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The face id for the extrude plane.", + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } }, { - "description": "Geometry metadata.", + "description": "A chamfer.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "length", "type" ], "properties": { @@ -210989,1737 +199359,1718 @@ "chamfer" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this chamfer.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] + "length": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The id for the fillet surface.", + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } } ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + } + } + }, + "required": false, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "format": "double" }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } } - ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "elem", - "type": "KclValue", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "KclValue", - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" - } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" - } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" } - } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] - }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ], + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Create a regular hexagon inscribed in a circle of radius 10\nhex = startSketchOn(XY)\n |> polygon({\n radius = 10,\n numSides = 6,\n center = [0, 0],\n inscribed = true\n }, %)\n\nexample = extrude(hex, length = 5)", + "// Create a square circumscribed around a circle of radius 5\nsquare = startSketchOn(XY)\n |> polygon({\n radius = 5.0,\n numSides = 4,\n center = [10, 10],\n inscribed = false\n }, %)\nexample = extrude(square, length = 5)" + ] + }, + { + "name": "pop", + "summary": "Remove the last element from an array.", + "description": "Returns a new array with the last element removed.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "array", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, "definitions": { "KclValue": { "description": "Any KCL value.", @@ -215162,7 +203513,8 @@ }, "required": true, "includeInSnippet": true, - "labelRequired": true + "description": "The array to pop from. Must not be empty.", + "labelRequired": false } ], "returnValue": { @@ -218002,344 +206354,937 @@ "unpublished": false, "deprecated": false, "examples": [ - "arr = [1, 2, 3]\nnew_arr = push(arr, 4)\nassertEqual(new_arr[3], 4, 0.00001, \"4 was added to the end of the array\")" + "arr = [1, 2, 3, 4]\nnew_arr = pop(arr)\nassertEqual(new_arr[0], 1, 0.00001, \"1 is the first element of the array\")\nassertEqual(new_arr[1], 2, 0.00001, \"2 is the second element of the array\")\nassertEqual(new_arr[2], 3, 0.00001, \"3 is the third element of the array\")" ] }, { - "name": "reduce", - "summary": "Take a starting value. Then, for each element of an array, calculate the next value, using the previous value and the element.", + "name": "pow", + "summary": "Compute the number to a power.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "pow", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = pow(5, 2))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "profileStart", + "summary": "Extract the provided 2-dimensional sketch's profile's origin value.", "description": "", "tags": [], "keywordArguments": false, "args": [ { - "name": "array", - "type": "[KclValue]", + "name": "sketch", + "type": "Sketch", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_KclValue", - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } }, "definitions": { - "KclValue": { - "description": "Any KCL value.", + "Path": { + "description": "A path.", "oneOf": [ { + "description": "A path that goes to a point.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Uuid" + "ToPoint" ] }, - "value": { - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Bool" + "TangentialArcTo" ] }, - "value": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", "type": "boolean" - } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] }, - "value": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "type": "string" + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "MixedArray" + "TangentialArc" ] }, - "value": { + "center": { + "description": "the arc's center", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "a complete arc", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "HomArray" + "Circle" ] }, - "value": { + "center": { + "description": "the arc's center", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Object" + "CircleThreePoint" ] }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "TagIdentifier" + "ArcThreePoint" ] }, - "value": { - "type": "string" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A path that is horizontal.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "TagDeclarator" + "Horizontal" ] }, - "value": { - "type": "string" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" }, - "digest": { + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "An angled line to.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Plane" + "AngledLineTo" ] }, - "value": { - "$ref": "#/components/schemas/Plane" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Face" + "Base" ] }, - "value": { - "$ref": "#/components/schemas/Face" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Sketch" + "Arc" ] }, - "value": { - "$ref": "#/components/schemas/Sketch" + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - }, + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Solid" + "Mm" ] - }, - "value": { - "$ref": "#/components/schemas/Solid" } } }, { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Helix" + "Cm" ] - }, - "value": { - "$ref": "#/components/schemas/Helix" } } }, { - "description": "Data for an imported geometry.", "type": "object", "required": [ - "id", - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ImportedGeometry" + "M" ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } } } }, @@ -218352,7 +207297,7 @@ "type": { "type": "string", "enum": [ - "Function" + "Inches" ] } } @@ -218360,18 +207305,14 @@ { "type": "object", "required": [ - "type", - "value" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Module" + "Feet" ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" } } }, @@ -218384,449 +207325,232 @@ "type": { "type": "string", "enum": [ - "Type" + "Yards" ] } } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ { "type": "object", "required": [ + "artifactId", + "id", + "origin", "type", - "value" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "KclNone" + "plane" ] }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] + "$ref": "#/components/schemas/ArtifactId" } - } + ] }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } + "$ref": "#/components/schemas/Point3d" } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" ] - } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } ] }, - "len": { + "units": { "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] } } }, { + "description": "A face.", "type": "object", "required": [ - "type" + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "M" + "face" ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + }, + "id": { + "description": "The id of the face.", "type": "string", - "enum": [ - "Inches" + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } ] - } - } - } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } } ] }, - "Plane": { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "ArtifactId": { "type": "string", "format": "uuid" @@ -218880,74 +207604,6 @@ } } }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "Solid": { "type": "object", "required": [ @@ -219201,49 +207857,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "Sketch": { "type": "object", "required": [ @@ -219308,6 +207921,261 @@ } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = 120, length = 50, tag = $seg01)\n |> angledLine(angle = segAng(seg01) + 120, length = 50)\n |> line(end = profileStart(%))\n |> close()\n |> extrude(length = 20)" + ] + }, + { + "name": "profileStartX", + "summary": "Extract the provided 2-dimensional sketch's profile's origin's 'x' value.", + "description": "", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "sketch", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { "Path": { "description": "A path.", "oneOf": [ @@ -220063,6 +208931,127 @@ } ] }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -220086,6 +209075,17 @@ } } }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -220239,25 +209239,395 @@ } ] }, - "BasePath": { - "description": "A base path.", + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "x", + "y", + "z" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, "to": { "description": "The to point.", @@ -220386,1087 +209756,858 @@ } } ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - } } } }, "required": true, "includeInSnippet": true, "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = -26.6, length = 50)\n |> angledLine(angle = 90, length = 50)\n |> angledLine(angle = 30, endAbsoluteX = profileStartX(%))" + ] + }, + { + "name": "profileStartY", + "summary": "Extract the provided 2-dimensional sketch's profile's origin's 'y' value.", + "description": "", + "tags": [], + "keywordArguments": false, + "args": [ { - "name": "start", - "type": "KclValue", + "name": "sketch", + "type": "Sketch", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "KclValue", - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" - } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" - } - } + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" - } + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - } + ] }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } - } + ] }, - { + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] - } + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - } + ] }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } - } + "originalId": { + "type": "string", + "format": "uuid" }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] - }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } + "units": { + "$ref": "#/components/schemas/UnitLen" } - ], + }, "definitions": { - "KclValue": { - "description": "Any KCL value.", + "Path": { + "description": "A path.", "oneOf": [ { + "description": "A path that goes to a point.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Uuid" + "ToPoint" ] }, - "value": { - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Bool" + "TangentialArcTo" ] }, - "value": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", "type": "boolean" - } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] }, - "value": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "ty": { - "$ref": "#/components/schemas/NumericType" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "String" + "TangentialArc" ] }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "value": { - "type": "string" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "a complete arc", "type": "object", "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "TagDeclarator" + "Circle" ] }, - "value": { - "type": "string" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "digest": { + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "type": "number", + "format": "double" }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "maxItems": 2, + "minItems": 2 }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "value": { - "$ref": "#/components/schemas/Plane" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "value": { - "$ref": "#/components/schemas/Face" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Solid" + "CircleThreePoint" ] }, - "value": { - "$ref": "#/components/schemas/Solid" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Helix" + "ArcThreePoint" ] }, - "value": { - "$ref": "#/components/schemas/Helix" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "Data for an imported geometry.", + "description": "A path that is horizontal.", "type": "object", "required": [ - "id", + "__geoMeta", + "from", + "to", "type", - "value" + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "ImportedGeometry" + "Horizontal" ] }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" }, - "value": { - "description": "The original file paths.", + "from": { + "description": "The from point.", "type": "array", "items": { - "type": "string" - } - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "An angled line to.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Module" + "AngledLineTo" ] }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "A base path.", "type": "object", "required": [ + "__geoMeta", + "from", + "to", "type", - "value" + "units" ], "properties": { "type": { "type": "string", "enum": [ - "KclNone" + "Base" ] }, - "value": { - "$ref": "#/components/schemas/KclNone" - } - } - } - ] - }, - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } - } + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } + "$ref": "#/components/schemas/TagDeclarator" } ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } - } + "nullable": true }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] + "$ref": "#/components/schemas/GeoMeta" } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" ] } } }, { + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "angle", - "len", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Default" + "Arc" ] }, - "len": { + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { "$ref": "#/components/schemas/UnitLen" }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } @@ -221562,139 +210703,259 @@ } ] }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } - ] + } }, - "Plane": { + "GeoMeta": { + "description": "Geometry metadata.", "type": "object", "required": [ - "artifactId", "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "sourceRange" ], "properties": { "id": { - "description": "The id of the plane.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 }, - "PlaneType": { - "description": "Type for a plane.", + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ "x", "y", "z" @@ -221714,74 +210975,6 @@ } } }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "Solid": { "type": "object", "required": [ @@ -222035,49 +211228,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "Sketch": { "type": "object", "required": [ @@ -222142,1345 +211292,371 @@ } } }, - "Path": { - "description": "A path.", + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "A path that goes to a point.", + "description": "A fillet.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "edgeId", + "id", + "radius", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "fillet" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "radius": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "A chamfer.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "edgeId", + "id", + "length", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" + "chamfer" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "length": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "sketch001 = startSketchOn(XY)\n |> startProfileAt([5, 2], %)\n |> angledLine(angle = -60, length = 14)\n |> angledLine(angle = 30, endAbsoluteY = profileStartY(%))" + ] + }, + { + "name": "push", + "summary": "Append an element to the end of an array.", + "description": "Returns a new array with the element appended.", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "array", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, + "definitions": { + "KclValue": { + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" ] + }, + "value": { + "type": "string", + "format": "uuid" } } }, { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" + "Bool" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", + "value": { "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", + "ty", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" + "Number" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + "value": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ty": { + "$ref": "#/components/schemas/NumericType" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "String" ] }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "MixedArray" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units", - "x" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "HomArray" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "Object" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "TagIdentifier" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string" } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "reduceFn", - "type": "FunctionSource", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "FunctionSource", - "type": "null", - "definitions": { - "KclValue": { - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" - } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" - } - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" - } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" + "TagDeclarator" ] }, "value": { @@ -225750,3091 +213926,2143 @@ "required": true, "includeInSnippet": true, "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "KclValue", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "KclValue", - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" + }, + { + "name": "elem", + "type": "KclValue", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "KclValue", + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] + }, + "value": { + "type": "string", + "format": "uuid" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] + }, + "value": { + "type": "boolean" + } } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { + "type": "number", + "format": "double" + }, + "ty": { + "$ref": "#/components/schemas/NumericType" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] + }, + "value": { + "type": "string" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" + } } - } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] + }, + "value": { + "$ref": "#/components/schemas/ModuleId" + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] - }, - "value": { - "$ref": "#/components/schemas/KclNone" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] + }, + "value": { + "$ref": "#/components/schemas/KclNone" + } } } - } - ], - "definitions": { - "NumericType": { - "oneOf": [ - { - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Count" - ] - } + ], + "definitions": { + "KclValue": { + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] + }, + "value": { + "type": "string", + "format": "uuid" } - }, - { - "description": "A unit of length.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Length" - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] + }, + "value": { + "type": "boolean" } - }, - { - "description": "A unit of angle.", - "type": "object", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] - } - } - } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Angle" - ] - } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { + "type": "number", + "format": "double" + }, + "ty": { + "$ref": "#/components/schemas/NumericType" } } - ], - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Known" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] + }, + "value": { + "type": "string" + } } - } - }, - { - "type": "object", - "required": [ - "angle", - "len", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Default" - ] - }, - "len": { - "$ref": "#/components/schemas/UnitLen" - }, - "angle": { - "$ref": "#/components/schemas/UnitAngle" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Any" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + } } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" + } } - } - } - ] - }, - "UnitAngle": { - "description": "A unit of angle.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Degrees" - ] + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Radians" - ] + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } } - } - } - ] - }, - "KclValue": { - "description": "Any KCL value.", - "oneOf": [ - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Bool" - ] - }, - "value": { - "type": "boolean" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] + }, + "value": { + "$ref": "#/components/schemas/ModuleId" + } } - } - }, - { - "type": "object", - "required": [ - "ty", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Number" - ] - }, - "value": { - "type": "number", - "format": "double" - }, - "ty": { - "$ref": "#/components/schemas/NumericType" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "String" - ] - }, - "value": { - "type": "string" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] + }, + "value": { + "$ref": "#/components/schemas/KclNone" + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "MixedArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } + }, + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "HomArray" - ] - }, - "value": { - "type": "array", - "items": { - "$ref": "#/components/schemas/KclValue" + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Object" - ] - }, - "value": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/KclValue" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagIdentifier" - ] - }, - "value": { - "type": "string" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" + ] + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TagDeclarator" - ] - }, - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Plane" - ] - }, - "value": { - "$ref": "#/components/schemas/Plane" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Face" - ] - }, - "value": { - "$ref": "#/components/schemas/Face" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Sketch" - ] - }, - "value": { - "$ref": "#/components/schemas/Sketch" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Solid" - ] - }, - "value": { - "$ref": "#/components/schemas/Solid" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Helix" - ] - }, - "value": { - "$ref": "#/components/schemas/Helix" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - }, - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ImportedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" + ] + }, + "UnitAngle": { + "description": "A unit of angle.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Function" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } } } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Module" - ] - }, - "value": { - "$ref": "#/components/schemas/ModuleId" - } + ] + }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Type" - ] - } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - }, - { - "type": "object", - "required": [ - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "KclNone" - ] - }, - "value": { - "$ref": "#/components/schemas/KclNone" - } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" } } - ] - }, - "Plane": { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Face": { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + }, + "Face": { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ModuleId": { - "description": "Identifier of a source file. Uses a u32 to keep the size small.", - "type": "integer", - "format": "uint32", - "minimum": 0.0 - }, - "KclNone": { - "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", - "type": "object", - "properties": { - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(arr) {\n return reduce(arr, 0, add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assertEqual` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassertEqual(sum([1, 2, 3]), 6, 0.00001, \"1 + 2 + 3 summed is 6\")", - "// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(arr, 0, fn(i, result_so_far) {\n return i + result_so_far\n})\n\n// We use `assertEqual` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassertEqual(sum, 6, 0.00001, \"1 + 2 + 3 summed is 6\")", - "// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = 1 / 10 * TAU\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfileAt([cos(0) * radius, sin(0) * radius], %)\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n })\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = (1/10) * TAU\n plane = startSketchOn('XY')\n startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" - ] - }, - { - "name": "rem", - "summary": "Compute the remainder after dividing `num` by `div`. If `num` is negative, the result will be too.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": true, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "description": "The number which will be divided by `divisor`.", - "labelRequired": false - }, - { - "name": "divisor", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "description": "The number which will divide `num`.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "assertEqual(rem(7, divisor = 4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(-7, divisor = 4), -3, 0.01, \"remainder is -3\")\nassertEqual(rem(7, divisor = -4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(6, divisor = 2.5), 1, 0.01, \"remainder is 1\")\nassertEqual(rem(6.5, divisor = 2.5), 1.5, 0.01, \"remainder is 1.5\")\nassertEqual(rem(6.5, divisor = 2), 0.5, 0.01, \"remainder is 0.5\")" - ] - }, - { - "name": "rotate", - "summary": "Rotate a solid or a sketch.", - "description": "This is really useful for assembling parts together. You can create a part and then rotate it to the correct orientation.\n\nFor sketches, you can use this to rotate a sketch and then loft it with another sketch.\n\n### Using Roll, Pitch, and Yaw\n\nWhen rotating a part in 3D space, \"roll,\" \"pitch,\" and \"yaw\" refer to the three rotational axes used to describe its orientation: roll is rotation around the longitudinal axis (front-to-back), pitch is rotation around the lateral axis (wing-to-wing), and yaw is rotation around the vertical axis (up-down); essentially, it's like tilting the part on its side (roll), tipping the nose up or down (pitch), and turning it left or right (yaw).\n\nSo, in the context of a 3D model:\n\n- **Roll**: Imagine spinning a pencil on its tip - that's a roll movement.\n\n- **Pitch**: Think of a seesaw motion, where the object tilts up or down along its side axis.\n\n- **Yaw**: Like turning your head left or right, this is a rotation around the vertical axis\n\n### Using an Axis and Angle\n\nWhen rotating a part around an axis, you specify the axis of rotation and the angle of rotation.", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "objects", - "type": "SolidOrSketchOrImportedGeometry", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SolidOrSketchOrImportedGeometry", - "description": "Data for a solid or an imported geometry.", - "oneOf": [ - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "importedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Solid" - }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "solidSet" - ] - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "sketchSet" - ] - } - } - } - ], - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" } }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ { - "description": "An extrude plane.", + "description": "A base path.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "ArcThreePoint" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -228842,44 +216070,64 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } }, { - "description": "An extruded arc.", + "description": "A path that is horizontal.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "to", + "type", + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "extrudeArc" + "Horizontal" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -228887,44 +216135,70 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } }, { - "description": "Geometry metadata.", + "description": "An angled line to.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "AngledLineTo" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -228932,44 +216206,58 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } }, { - "description": "Geometry metadata.", + "description": "A base path.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "Base" ] }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -228977,797 +216265,11 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/GeoMeta" } ] } @@ -229856,95 +216358,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -230121,55 +216534,6 @@ } ] }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, "BasePath": { "description": "A base path.", "type": "object", @@ -230317,290 +216681,67 @@ } } ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solid, sketch, or set of solids or sketches to rotate.", - "labelRequired": false - }, - { - "name": "roll", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, - "definitions": { - "Solid": { + }, + "Helix": { + "description": "A helix.", "type": "object", "required": [ + "angleStart", "artifactId", - "height", - "id", - "sketch", + "ccw", + "revolutions", "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", + "value": { + "description": "The id of the helix.", "type": "string", "format": "uuid" }, "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "description": "The artifact ID.", "allOf": [ { "$ref": "#/components/schemas/ArtifactId" } ] }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" }, - "height": { - "description": "The height of the solid.", + "angleStart": { + "description": "Start angle (in degrees).", "type": "number", "format": "double" }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" }, - "endCapId": { - "description": "The id of the extrusion end cap", + "cylinderId": { + "description": "The cylinder the helix was created on.", "type": "string", "format": "uuid", "nullable": true }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", "type": "object", - "required": [ - "value" - ], "properties": { - "value": { - "type": "string" - }, "digest": { "type": "array", "items": { @@ -230611,2441 +216752,3484 @@ "maxItems": 32, "minItems": 32, "nullable": true - }, - "start": { + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "KclValue", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "KclValue", + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] + }, + "value": { + "type": "string", + "format": "uuid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] + }, + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { + "type": "number", + "format": "double" + }, + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" } } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] + }, + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] + }, + "value": { + "$ref": "#/components/schemas/KclNone" + } + } + } + ], + "definitions": { + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } - ] + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + }, + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } } - ] + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] + } } } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + } + ] + }, + "UnitAngle": { + "description": "A unit of angle.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + } + } + ] + }, + "KclValue": { + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] + }, + "value": { + "type": "string", + "format": "uuid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] + }, + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { + "type": "number", + "format": "double" + }, + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" } } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" } - ] + } } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" } } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + } } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "value": { + "type": "string" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" } } - ] - } - } - }, - "required": false, - "includeInSnippet": true, - "description": "The roll angle in degrees. Must be between -360 and 360. Default is 0 if not given.", - "labelRequired": true - }, - { - "name": "pitch", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" } } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "value": { + "$ref": "#/components/schemas/ModuleId" + } } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] + }, + "value": { + "$ref": "#/components/schemas/KclNone" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Face": { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "properties": { + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "arr = [1, 2, 3]\nnew_arr = push(arr, 4)\nassertEqual(new_arr[3], 4, 0.00001, \"4 was added to the end of the array\")" + ] + }, + { + "name": "reduce", + "summary": "Take a starting value. Then, for each element of an array, calculate the next value, using the previous value and the element.", + "description": "", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "array", + "type": "[KclValue]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_KclValue", + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + }, + "definitions": { + "KclValue": { + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" ] + }, + "value": { + "type": "string", + "format": "uuid" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "Bool" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "boolean" } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "ty", "type", - "units", - "x" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "Number" ] }, - "x": { - "description": "The x coordinate.", + "value": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ty": { + "$ref": "#/components/schemas/NumericType" } } }, { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "String" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" ] + }, + "value": { + "type": "string" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "TagDeclarator" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 + "maxItems": 32, + "minItems": 32, + "nullable": true }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" ] + }, + "value": { + "$ref": "#/components/schemas/Face" } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" + "Sketch" ] }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", + "value": { + "description": "The original file paths.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] }, - "tag": { - "description": "The tag of the path.", - "allOf": [ + "value": { + "$ref": "#/components/schemas/KclNone" + } + } + } + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } } ], - "nullable": true + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] + } + } + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" ] } } @@ -233141,182 +220325,109 @@ } ] }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", + "UnitAngle": { + "description": "A unit of angle.", "oneOf": [ { "type": "object", "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "Degrees" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", "type": "object", "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } + "Radians" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } ] }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -233366,171 +220477,74 @@ } } }, - "BasePath": { - "description": "A base path.", + "Face": { + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The tag of the face.", + "type": "string" }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the face's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" } ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - } + ] }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" } - } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - ] - } - } - }, - "required": false, - "includeInSnippet": true, - "description": "The pitch angle in degrees. Must be between -360 and 360. Default is 0 if not given.", - "labelRequired": true - }, - { - "name": "yaw", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, - "definitions": { + } + }, "Solid": { "type": "object", "required": [ @@ -233599,10 +220613,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -234650,95 +221660,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -234915,55 +221836,6 @@ } ] }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, "BasePath": { "description": "A base path.", "type": "object", @@ -235111,292 +221983,266 @@ } } ] - } - } - }, - "required": false, - "includeInSnippet": true, - "description": "The yaw angle in degrees. Must be between -360 and 360. Default is 0 if not given.", - "labelRequired": true - }, - { - "name": "axis", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Array_size_3_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 3, - "minItems": 3, - "nullable": true, - "definitions": { - "Solid": { + }, + "Helix": { + "description": "A helix.", "type": "object", "required": [ + "angleStart", "artifactId", - "height", - "id", - "sketch", + "ccw", + "revolutions", "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", + "value": { + "description": "The id of the helix.", "type": "string", "format": "uuid" }, "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "description": "The artifact ID.", "allOf": [ { "$ref": "#/components/schemas/ArtifactId" } ] }, - "value": { - "description": "The extrude surfaces.", + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "properties": { + "digest": { "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "start", + "type": "KclValue", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "KclValue", + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } + "value": { + "type": "string", + "format": "uuid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" ] }, - "height": { - "description": "The height of the solid.", + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { "type": "number", "format": "double" }, - "startCapId": { - "description": "The id of the extrusion start cap", + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { "type": "string", - "format": "uuid", - "nullable": true + "enum": [ + "String" + ] }, - "endCapId": { - "description": "The id of the extrusion end cap", + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { "type": "string", - "format": "uuid", - "nullable": true + "enum": [ + "MixedArray" + ] }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", + "value": { "type": "array", "items": { - "$ref": "#/components/schemas/EdgeCut" + "$ref": "#/components/schemas/KclValue" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] }, - { - "description": "Geometry metadata.", + "value": { "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "value": { + "type": "string" } - ] + } }, - "TagDeclarator": { + { "type": "object", "required": [ + "type", "value" ], "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, "value": { "type": "string" }, @@ -235423,830 +222269,801 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" + } + } }, - "Sketch": { + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", "type": "object", "required": [ - "artifactId", "id", - "on", - "originalId", - "paths", - "start", - "units" + "type", + "value" ], "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "description": "The ID of the imported geometry.", "type": "string", "format": "uuid" }, - "paths": { - "description": "The paths in the sketch.", + "value": { + "description": "The original file paths.", "type": "array", "items": { - "$ref": "#/components/schemas/Path" + "type": "string" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" ] }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" ] - }, - "originalId": { + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { "type": "string", - "format": "uuid" + "enum": [ + "KclNone" + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/KclNone" } } - }, - "Path": { - "description": "A path.", + } + ], + "definitions": { + "KclValue": { + "description": "Any KCL value.", "oneOf": [ { - "description": "A path that goes to a point.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "Uuid" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string", + "format": "uuid" } } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" + "Bool" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", + "value": { "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } }, { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", + "ty", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" + "Number" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" + "HomArray" ] }, - "center": { - "description": "the arc's center", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "Object" ] }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "TagIdentifier" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 + "maxItems": 32, + "minItems": 32, + "nullable": true }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" ] + }, + "value": { + "$ref": "#/components/schemas/Solid" } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units", - "x" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "Helix" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", + "value": { + "description": "The original file paths.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" ] } } }, { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "Module" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" ] } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "KclNone" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/KclNone" + } + } + } + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } }, - "tag": { - "description": "The tag of the path.", - "allOf": [ + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } } ], - "nullable": true + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" ] } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "angle", + "len", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" + "Default" ] }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { + "len": { "$ref": "#/components/schemas/UnitLen" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" ] } } @@ -236342,182 +223159,109 @@ } ] }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", + "UnitAngle": { + "description": "A unit of angle.", "oneOf": [ { "type": "object", "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "Degrees" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", "type": "object", "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } + "Radians" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } ] }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -236567,170 +223311,74 @@ } } }, - "BasePath": { - "description": "A base path.", + "Face": { + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The tag of the face.", + "type": "string" }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the face's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" } ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - } + ] }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" } - } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - ] - } - } - }, - "required": false, - "description": "The axis to rotate around. Must be used with `angle`.", - "labelRequired": true - }, - { - "name": "angle", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, - "definitions": { + } + }, "Solid": { "type": "object", "required": [ @@ -236799,10 +223447,6 @@ } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -237850,95 +224494,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -238115,55 +224670,6 @@ } ] }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, "BasePath": { "description": "A base path.", "type": "object", @@ -238311,1135 +224817,704 @@ } } ] - } - } - }, - "required": false, - "description": "The angle to rotate in degrees. Must be used with `axis`. Must be between -360 and 360.", - "labelRequired": true - }, - { - "name": "global", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { - "Solid": { + }, + "Helix": { + "description": "A helix.", "type": "object", "required": [ + "angleStart", "artifactId", - "height", - "id", - "sketch", + "ccw", + "revolutions", "units", "value" ], "properties": { - "id": { - "description": "The id of the solid.", + "value": { + "description": "The id of the helix.", "type": "string", "format": "uuid" }, "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "description": "The artifact ID.", "allOf": [ { "$ref": "#/components/schemas/ArtifactId" } ] }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" }, - "height": { - "description": "The height of the solid.", + "angleStart": { + "description": "Start angle (in degrees).", "type": "number", "format": "double" }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" }, - "endCapId": { - "description": "The id of the extrusion end cap", + "cylinderId": { + "description": "The cylinder the helix was created on.", "type": "string", "format": "uuid", "nullable": true }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "properties": { + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "reduceFn", + "type": "FunctionSource", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "FunctionSource", + "type": "null", + "definitions": { + "KclValue": { + "description": "Any KCL value.", "oneOf": [ { - "description": "An extrude plane.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "type", + "value" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "Uuid" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", + "value": { "type": "string", "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } }, { - "description": "An extruded arc.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "type", + "value" ], "properties": { "type": { "type": "string", "enum": [ - "extrudeArc" + "Bool" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "value": { + "type": "boolean" } } }, { - "description": "Geometry metadata.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "ty", + "type", + "value" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "Number" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "value": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + "ty": { + "$ref": "#/components/schemas/NumericType" } } }, { - "description": "Geometry metadata.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "type", + "value" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "String" ] }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + "value": { + "type": "string" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ { - "description": "A path that goes to a point.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "MixedArray" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" + "HomArray" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", + "value": { "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" + "Object" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "a complete arc", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" + "TagIdentifier" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "type": "string" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "TagDeclarator" ] }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "Plane" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "$ref": "#/components/schemas/Plane" } } }, { - "description": "A path that is horizontal.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units", - "x" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "Face" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "$ref": "#/components/schemas/Face" } } }, { - "description": "An angled line to.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "Sketch" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "$ref": "#/components/schemas/Sketch" } } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "Solid" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "value": { + "$ref": "#/components/schemas/Solid" } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", "type", - "units" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" + "Helix" ] }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" }, - "from": { - "description": "The from point.", + "value": { + "description": "The original file paths.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/KclNone" + } + } + } + ] + }, + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } }, - "tag": { - "description": "The tag of the path.", - "allOf": [ + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } } ], - "nullable": true + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] + } + } + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" ] } } @@ -239535,182 +225610,109 @@ } ] }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", + "UnitAngle": { + "description": "A unit of angle.", "oneOf": [ { "type": "object", "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "Degrees" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", "type": "object", "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } + "Radians" ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } ] }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -239760,119 +225762,242 @@ } } }, - "BasePath": { - "description": "A base path.", + "Face": { + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The tag of the face.", + "type": "string" }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the face's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "TagIdentifier": { + "Solid": { "type": "object", "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", "value" ], "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, "value": { - "type": "string" + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { - "description": "A fillet.", + "description": "An extrude plane.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "radius", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "extrudePlane" ] }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, "id": { - "description": "The id of the engine command that called this fillet.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "radius": { - "type": "number", - "format": "double" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] }, - "edgeId": { - "description": "The engine id of the edge to fillet.", + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } }, { - "description": "A chamfer.", + "description": "Geometry metadata.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "length", + "sourceRange", "type" ], "properties": { @@ -239882,1231 +226007,1963 @@ "chamfer" ] }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, "id": { - "description": "The id of the engine command that called this chamfer.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "length": { - "type": "number", - "format": "double" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + "faceId": { + "description": "The id for the fillet surface.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } } ] - } - } - }, - "required": false, - "description": "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "SolidOrSketchOrImportedGeometry", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SolidOrSketchOrImportedGeometry", - "description": "Data for a solid or an imported geometry.", - "oneOf": [ - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "importedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Solid" - }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "solidSet" - ] - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Sketch" }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "sketchSet" - ] - } - } - } - ], - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "properties": { + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "KclValue", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "KclValue", + "description": "Any KCL value.", + "oneOf": [ + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Uuid" + ] + }, + "value": { + "type": "string", + "format": "uuid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] + }, + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" + ] + }, + "value": { + "type": "number", + "format": "double" + }, + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" + ] + }, + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" + ] + }, + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagIdentifier" + ] + }, + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TagDeclarator" + ] + }, + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" + ] + }, + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" + ] + }, + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] + }, + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] + }, + "value": { + "$ref": "#/components/schemas/KclNone" + } + } + } + ], + "definitions": { + "NumericType": { + "oneOf": [ + { + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Count" + ] + } + } + }, + { + "description": "A unit of length.", + "type": "object", + "oneOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Length" + ] + } + } + }, + { + "description": "A unit of angle.", + "type": "object", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] + } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Angle" + ] } + } + } + ], + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Known" + ] + } + } + }, + { + "type": "object", + "required": [ + "angle", + "len", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Default" + ] + }, + "len": { + "$ref": "#/components/schemas/UnitLen" + }, + "angle": { + "$ref": "#/components/schemas/UnitAngle" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Any" ] } } @@ -241202,182 +228059,495 @@ } ] }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "UnitAngle": { + "description": "A unit of angle.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Degrees" + ] + } + } }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Radians" + ] } - ] + } } - } + ] }, - "SketchSurface": { - "description": "A sketch type.", + "KclValue": { + "description": "Any KCL value.", "oneOf": [ { "type": "object", "required": [ - "artifactId", - "id", - "origin", "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "plane" + "Uuid" ] }, - "id": { - "description": "The id of the plane.", + "value": { "type": "string", "format": "uuid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Bool" + ] }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } + "value": { + "type": "boolean" + } + } + }, + { + "type": "object", + "required": [ + "ty", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Number" ] }, "value": { - "$ref": "#/components/schemas/PlaneType" + "type": "number", + "format": "double" }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "ty": { + "$ref": "#/components/schemas/NumericType" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "String" ] }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "MixedArray" ] }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "HomArray" ] }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "value": { + "type": "array", + "items": { + "$ref": "#/components/schemas/KclValue" + } + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Object" ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/KclValue" + } } } }, { - "description": "A face.", "type": "object", "required": [ - "artifactId", - "id", - "solid", "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "value" ], "properties": { "type": { "type": "string", "enum": [ - "face" + "TagIdentifier" ] }, - "id": { - "description": "The id of the face.", + "value": { + "type": "string" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } + "enum": [ + "TagDeclarator" ] }, "value": { - "description": "The tag of the face.", "type": "string" }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Plane" ] }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } + "value": { + "$ref": "#/components/schemas/Plane" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Face" ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/Face" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Sketch" + ] + }, + "value": { + "$ref": "#/components/schemas/Sketch" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Solid" + ] + }, + "value": { + "$ref": "#/components/schemas/Solid" + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Helix" + ] + }, + "value": { + "$ref": "#/components/schemas/Helix" + } + } + }, + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ImportedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Function" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Module" + ] + }, + "value": { + "$ref": "#/components/schemas/ModuleId" + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Type" + ] + } + } + }, + { + "type": "object", + "required": [ + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "KclNone" + ] + }, + "value": { + "$ref": "#/components/schemas/KclNone" } } } ] }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -241427,119 +228597,242 @@ } } }, - "BasePath": { - "description": "A base path.", + "Face": { + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "artifactId", + "id", + "solid", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "description": "The tag of the face.", + "type": "string" }, - "tag": { - "description": "The tag of the path.", + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "yAxis": { + "description": "What should the face's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "TagIdentifier": { + "Solid": { "type": "object", "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", "value" ], "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, "value": { - "type": "string" + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { - "description": "A fillet.", + "description": "An extrude plane.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "radius", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "extrudePlane" ] }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, "id": { - "description": "The id of the engine command that called this fillet.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "radius": { - "type": "number", - "format": "double" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] }, - "edgeId": { - "description": "The engine id of the edge to fillet.", + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } }, { - "description": "A chamfer.", + "description": "Geometry metadata.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "length", + "sourceRange", "type" ], "properties": { @@ -241549,793 +228842,1883 @@ "chamfer" ] }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, "id": { - "description": "The id of the engine command that called this chamfer.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "length": { - "type": "number", - "format": "double" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + "faceId": { + "description": "The id for the fillet surface.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } } ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Rotate a pipe with roll, pitch, and yaw.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10, pitch = 10, yaw = 90)", - "// Rotate a pipe with just roll.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10)", - "// Rotate a pipe about an axis with an angle.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(axis = [0, 0, 1.0], angle = 90)", - "// Rotate an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> rotate(axis = [0, 0, 1.0], angle = 9)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Rotate the sweeps.\nrotate(parts, axis = [0, 0, 1.0], angle = 90)", - "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfileAt([-10, 10], sketch001)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" - ] - }, - { - "name": "round", - "summary": "Round a number to the nearest integer.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [12, 10])\n |> line(end = [round(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" - ] - }, - { - "name": "scale", - "summary": "Scale a solid or a sketch.", - "description": "This is really useful for resizing parts. You can create a part and then scale it to the correct size.\n\nFor sketches, you can use this to scale a sketch and then loft it with another sketch.\n\nBy default the transform is applied in local sketch axis, therefore the origin will not move.\n\nIf you want to apply the transform in global space, set `global` to `true`. The origin of the model will move. If the model is not centered on origin and you scale globally it will look like the model moves and gets bigger at the same time. Say you have a square `(1,1) - (1,2) - (2,2) - (2,1)` and you scale by 2 globally it will become `(2,2) - (2,4)`...etc so the origin has moved from `(1.5, 1.5)` to `(2,2)`.", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "objects", - "type": "SolidOrSketchOrImportedGeometry", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SolidOrSketchOrImportedGeometry", - "description": "Data for a solid or an imported geometry.", - "oneOf": [ - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "importedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Solid" + "maxItems": 32, + "minItems": 32, + "nullable": true }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "solidSet" - ] - } + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Sketch" + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "sketchSet" - ] + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - } - } - ], - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "maxItems": 2, + "minItems": 2 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ModuleId": { + "description": "Identifier of a source file. Uses a u32 to keep the size small.", + "type": "integer", + "format": "uint32", + "minimum": 0.0 + }, + "KclNone": { + "description": "KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application).", + "type": "object", + "properties": { + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + } + } + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// This function adds two numbers.\nfn add(a, b) {\n return a + b\n}\n\n// This function adds an array of numbers.\n// It uses the `reduce` function, to call the `add` function on every\n// element of the `arr` parameter. The starting value is 0.\nfn sum(arr) {\n return reduce(arr, 0, add)\n}\n\n/* The above is basically like this pseudo-code:\nfn sum(arr):\n sumSoFar = 0\n for i in arr:\n sumSoFar = add(sumSoFar, i)\n return sumSoFar */\n\n// We use `assertEqual` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassertEqual(sum([1, 2, 3]), 6, 0.00001, \"1 + 2 + 3 summed is 6\")", + "// This example works just like the previous example above, but it uses\n// an anonymous `add` function as its parameter, instead of declaring a\n// named function outside.\narr = [1, 2, 3]\nsum = reduce(arr, 0, fn(i, result_so_far) {\n return i + result_so_far\n})\n\n// We use `assertEqual` to check that our `sum` function gives the\n// expected result. It's good to check your work!\nassertEqual(sum, 6, 0.00001, \"1 + 2 + 3 summed is 6\")", + "// Declare a function that sketches a decagon.\nfn decagon(radius) {\n // Each side of the decagon is turned this many radians from the previous angle.\n stepAngle = 1 / 10 * TAU\n\n // Start the decagon sketch at this point.\n startOfDecagonSketch = startSketchOn(XY)\n |> startProfileAt([cos(0) * radius, sin(0) * radius], %)\n\n // Use a `reduce` to draw the remaining decagon sides.\n // For each number in the array 1..10, run the given function,\n // which takes a partially-sketched decagon and adds one more edge to it.\n fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) {\n // Draw one edge of the decagon.\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n return line(partialDecagon, end = [x, y])\n })\n\n return fullDecagon\n}\n\n/* The `decagon` above is basically like this pseudo-code:\nfn decagon(radius):\n stepAngle = (1/10) * TAU\n plane = startSketchOn('XY')\n startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane)\n\n // Here's the reduce part.\n partialDecagon = startOfDecagonSketch\n for i in [1..10]:\n x = cos(stepAngle * i) * radius\n y = sin(stepAngle * i) * radius\n partialDecagon = line(partialDecagon, end = [x, y])\n fullDecagon = partialDecagon // it's now full\n return fullDecagon */\n\n// Use the `decagon` function declared above, to sketch a decagon with radius 5.\ndecagon(5.0)\n |> close()" + ] + }, + { + "name": "rem", + "summary": "Compute the remainder after dividing `num` by `div`. If `num` is negative, the result will be too.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": true, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "description": "The number which will be divided by `divisor`.", + "labelRequired": false + }, + { + "name": "divisor", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "description": "The number which will divide `num`.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "assertEqual(rem(7, divisor = 4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(-7, divisor = 4), -3, 0.01, \"remainder is -3\")\nassertEqual(rem(7, divisor = -4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(6, divisor = 2.5), 1, 0.01, \"remainder is 1\")\nassertEqual(rem(6.5, divisor = 2.5), 1.5, 0.01, \"remainder is 1.5\")\nassertEqual(rem(6.5, divisor = 2), 0.5, 0.01, \"remainder is 0.5\")" + ] + }, + { + "name": "rotate", + "summary": "Rotate a solid or a sketch.", + "description": "This is really useful for assembling parts together. You can create a part and then rotate it to the correct orientation.\n\nFor sketches, you can use this to rotate a sketch and then loft it with another sketch.\n\n### Using Roll, Pitch, and Yaw\n\nWhen rotating a part in 3D space, \"roll,\" \"pitch,\" and \"yaw\" refer to the three rotational axes used to describe its orientation: roll is rotation around the longitudinal axis (front-to-back), pitch is rotation around the lateral axis (wing-to-wing), and yaw is rotation around the vertical axis (up-down); essentially, it's like tilting the part on its side (roll), tipping the nose up or down (pitch), and turning it left or right (yaw).\n\nSo, in the context of a 3D model:\n\n- **Roll**: Imagine spinning a pencil on its tip - that's a roll movement.\n\n- **Pitch**: Think of a seesaw motion, where the object tilts up or down along its side axis.\n\n- **Yaw**: Like turning your head left or right, this is a rotation around the vertical axis\n\n### Using an Axis and Angle\n\nWhen rotating a part around an axis, you specify the axis of rotation and the angle of rotation.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "objects", + "type": "SolidOrSketchOrImportedGeometry", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SolidOrSketchOrImportedGeometry", + "description": "Data for a solid or an imported geometry.", + "oneOf": [ + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "importedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Solid" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "solidSet" + ] + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sketchSet" + ] + } + } + } + ], + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { "description": "The from point.", "type": "array", "items": { @@ -242378,14 +230761,13 @@ } }, { - "description": "A base path.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ "__geoMeta", + "ccw", + "center", "from", - "p1", - "p2", - "p3", "to", "type", "units" @@ -242394,21 +230776,11 @@ "type": { "type": "string", "enum": [ - "CircleThreePoint" + "TangentialArcTo" ] }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", + "center": { + "description": "the arc's center", "type": "array", "items": { "type": "number", @@ -242417,15 +230789,9 @@ "maxItems": 2, "minItems": 2 }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "ccw": { + "description": "arc's direction", + "type": "boolean" }, "from": { "description": "The from point.", @@ -242470,14 +230836,13 @@ } }, { - "description": "A base path.", + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ "__geoMeta", + "ccw", + "center", "from", - "p1", - "p2", - "p3", "to", "type", "units" @@ -242486,11 +230851,260 @@ "type": { "type": "string", "enum": [ - "ArcThreePoint" + "TangentialArc" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", "type": "array", "items": { "type": "number", @@ -243305,11 +231919,11 @@ }, "required": true, "includeInSnippet": true, - "description": "The solid, sketch, or set of solids or sketches to scale.", + "description": "The solid, sketch, or set of solids or sketches to rotate.", "labelRequired": false }, { - "name": "x", + "name": "roll", "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", @@ -244903,11 +233517,11 @@ }, "required": false, "includeInSnippet": true, - "description": "The scale factor for the x axis. Default is 1 if not provided.", + "description": "The roll angle in degrees. Must be between -360 and 360. Default is 0 if not given.", "labelRequired": true }, { - "name": "y", + "name": "pitch", "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", @@ -246501,11 +235115,11 @@ }, "required": false, "includeInSnippet": true, - "description": "The scale factor for the y axis. Default is 1 if not provided.", + "description": "The pitch angle in degrees. Must be between -360 and 360. Default is 0 if not given.", "labelRequired": true }, { - "name": "z", + "name": "yaw", "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", @@ -248099,16 +236713,22 @@ }, "required": false, "includeInSnippet": true, - "description": "The scale factor for the z axis. Default is 1 if not provided.", + "description": "The yaw angle in degrees. Must be between -360 and 360. Default is 0 if not given.", "labelRequired": true }, { - "name": "global", - "type": "bool", + "name": "axis", + "type": "[number]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", + "title": "Nullable_Array_size_3_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3, "nullable": true, "definitions": { "Solid": { @@ -249695,2105 +238315,1614 @@ } }, "required": false, - "description": "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move.", + "description": "The axis to rotate around. Must be used with `angle`.", "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "SolidOrSketchOrImportedGeometry", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SolidOrSketchOrImportedGeometry", - "description": "Data for a solid or an imported geometry.", - "oneOf": [ - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "importedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" + }, + { + "name": "angle", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Solid" }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "solidSet" - ] - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Sketch" + "ArtifactId": { + "type": "string", + "format": "uuid" }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "sketchSet" - ] - } - } - } - ], - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + "z": { + "type": "number", + "format": "double" + } } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Scale a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> scale(z = 2.5)", - "// Scale an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> scale(y = 2.5)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Scale the sweep.\nscale(parts, z = 0.5)" - ] - }, - { - "name": "segAng", - "summary": "Compute the angle (in degrees) of the provided line segment.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [5, 10], tag = $seg01)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = 10)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = -15)\n |> close()\n\nexample = extrude(exampleSketch, length = 4)" - ] - }, - { - "name": "segEnd", - "summary": "Compute the ending point of the provided line segment.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_TyF64", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2, - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "w = 15\ncube = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = radius, center = segEnd(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" - ] - }, - { - "name": "segEndX", - "summary": "Compute the ending point of the provided line segment along the 'x' axis.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TyF64", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [segEndX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "segEndY", - "summary": "Compute the ending point of the provided line segment along the 'y' axis.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TyF64", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, segEndY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "segLen", - "summary": "Compute the length of the provided line segment.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TyF64", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10, tag = $thing)\n |> tangentialArc({ offset = -120, radius = 5 }, %)\n |> angledLine(angle = -60, length = segLen(thing))\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "segStart", - "summary": "Compute the starting point of the provided line segment.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_TyF64", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2, - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "w = 15\ncube = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = radius, center = segStart(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" - ] - }, - { - "name": "segStartX", - "summary": "Compute the starting point of the provided line segment along the 'x' axis.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TyF64", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [20 - segStartX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "segStartY", - "summary": "Compute the starting point of the provided line segment along the 'y' axis.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] } } }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TyF64", - "type": "number", - "format": "double" + "required": false, + "description": "The angle to rotate in degrees. Must be used with `axis`. Must be between -360 and 360.", + "labelRequired": true }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, 20 - segStartY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "shell", - "summary": "Remove volume from a 3-dimensional shape such that a wall of the provided thickness remains, taking volume starting at the provided face, leaving it open in that direction.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ { - "name": "solids", - "type": "[Solid]", + "name": "global", + "type": "bool", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, + "title": "Nullable_Boolean", + "type": "boolean", + "nullable": true, "definitions": { "Solid": { "type": "object", @@ -253378,1039 +241507,1914 @@ } } }, - "required": true, - "includeInSnippet": true, - "description": "Which solid (or solids) to shell out", - "labelRequired": false - }, - { - "name": "thickness", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double", - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "required": false, + "description": "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "SolidOrSketchOrImportedGeometry", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SolidOrSketchOrImportedGeometry", + "description": "Data for a solid or an imported geometry.", + "oneOf": [ + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "importedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" } } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Solid" }, - "ArtifactId": { - "type": "string", - "format": "uuid" + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "solidSet" + ] + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Sketch" }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sketchSet" + ] + } + } + } + ], + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Rotate a pipe with roll, pitch, and yaw.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10, pitch = 10, yaw = 90)", + "// Rotate a pipe with just roll.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(roll = 10)", + "// Rotate a pipe about an axis with an angle.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> rotate(axis = [0, 0, 1.0], angle = 90)", + "// Rotate an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> rotate(axis = [0, 0, 1.0], angle = 9)", + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Rotate the sweeps.\nrotate(parts, axis = [0, 0, 1.0], angle = 90)", + "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfileAt([-10, 10], sketch001)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(x = 0, y = 0, z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" + ] + }, + { + "name": "round", + "summary": "Round a number to the nearest integer.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "sketch001 = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(endAbsolute = [12, 10])\n |> line(end = [round(7.02986), 0])\n |> yLine(endAbsolute = 0)\n |> close()\n\nextrude001 = extrude(sketch001, length = 5)" + ] + }, + { + "name": "scale", + "summary": "Scale a solid or a sketch.", + "description": "This is really useful for resizing parts. You can create a part and then scale it to the correct size.\n\nFor sketches, you can use this to scale a sketch and then loft it with another sketch.\n\nBy default the transform is applied in local sketch axis, therefore the origin will not move.\n\nIf you want to apply the transform in global space, set `global` to `true`. The origin of the model will move. If the model is not centered on origin and you scale globally it will look like the model moves and gets bigger at the same time. Say you have a square `(1,1) - (1,2) - (2,2) - (2,1)` and you scale by 2 globally it will become `(2,2) - (2,4)`...etc so the origin has moved from `(1.5, 1.5)` to `(2,2)`.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "objects", + "type": "SolidOrSketchOrImportedGeometry", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SolidOrSketchOrImportedGeometry", + "description": "Data for a solid or an imported geometry.", + "oneOf": [ + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "importedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Solid" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "solidSet" + ] + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sketchSet" + ] + } + } + } + ], + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { "type": { "type": "string", "enum": [ - "Base" + "extrudePlane" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -254418,80 +243422,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A circular arc, not necessarily tangential to the current point.", + "description": "An extruded arc.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Arc" + "extrudeArc" ] }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -254499,132 +243467,1089 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } }, { + "description": "Geometry metadata.", "type": "object", "required": [ + "faceId", + "id", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Cm" + "chamfer" ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + }, + "faceId": { + "description": "The id for the chamfer surface.", "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Inches" + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] } } }, { + "description": "Geometry metadata.", "type": "object", "required": [ + "faceId", + "id", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "Feet" + "fillet" ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { + }, + "faceId": { + "description": "The id for the fillet surface.", "type": "string", - "enum": [ - "Yards" + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } ] } } } ] }, - "GeoMeta": { - "description": "Geometry metadata.", + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { "type": "object", "required": [ + "artifactId", "id", - "sourceRange" + "on", + "originalId", + "paths", + "start", + "units" ], "properties": { "id": { - "description": "The id of the geometry.", + "description": "The id of the sketch (this will change when the engine's reference to it changes).", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/SketchSurface" } ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { "type": "object", @@ -254977,19 +244902,18 @@ }, "required": true, "includeInSnippet": true, - "description": "The thickness of the shell", - "labelRequired": true + "description": "The solid, sketch, or set of solids or sketches to scale.", + "labelRequired": false }, { - "name": "faces", - "type": "[FaceTag]", + "name": "x", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_FaceTag", - "type": "array", - "items": { - "$ref": "#/components/schemas/FaceTag" - }, + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, "definitions": { "Solid": { "type": "object", @@ -256571,1937 +246495,1143 @@ } } ] - }, - "FaceTag": { - "description": "A tag for a face.", - "anyOf": [ - { - "$ref": "#/components/schemas/StartOrEnd" + } + } + }, + "required": false, + "includeInSnippet": true, + "description": "The scale factor for the x axis. Default is 1 if not provided.", + "labelRequired": true + }, + { + "name": "y", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" }, - { - "description": "A tag for the face.", + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { - "$ref": "#/components/schemas/TagIdentifier" + "$ref": "#/components/schemas/ArtifactId" } ] - } - ] - }, - "StartOrEnd": { - "oneOf": [ - { - "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", - "type": "string", - "enum": [ - "start" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } ] }, - { - "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", "type": "string", - "enum": [ - "end" - ] - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The faces you want removed", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Remove the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the end face for the extrusion.\nshell(firstSketch, faces = ['end'], thickness = 0.25)", - "// Remove the start face for the extrusion.\nfirstSketch = startSketchOn(-XZ)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the start face for the extrusion.\nshell(firstSketch, faces = ['start'], thickness = 0.25)", - "// Remove a tagged face and the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face for the extrusion.\nshell(firstSketch, faces = [myTag], thickness = 0.25)", - "// Remove multiple faces at once.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face and the end face for the extrusion.\nshell(firstSketch, faces = [myTag, 'end'], thickness = 0.25)", - "// Shell a sketch on face.\nsize = 100\ncase = startSketchOn(-XZ)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"case\" in the shell function to shell the entire object.\nshell(case, faces = ['start'], thickness = 5)", - "// Shell a sketch on face object on the end face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" in the shell function to shell the end face of the object.\nshell(thing1, faces = ['end'], thickness = 5)", - "// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell([thing1, thing2], faces = ['end'], thickness = 5)" - ] - }, - { - "name": "sqrt", - "summary": "Compute the square root of a number.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = sqrt(2500))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "startProfileAt", - "summary": "Start a new profile at a given point.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "to", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "sketchSurface", - "type": "SketchSurface", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SketchSurface", - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ], - "definitions": { - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] }, { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } }, { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } } ] }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, "UnitLen": { "description": "A unit of length.", "oneOf": [ @@ -258591,156 +247721,550 @@ } ] }, - "Solid": { + "GeoMeta": { + "description": "Geometry metadata.", "type": "object", "required": [ - "artifactId", - "height", "id", - "sketch", - "units", - "value" + "sourceRange" ], "properties": { "id": { - "description": "The id of the solid.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { - "description": "An extrude plane.", "type": "object", "required": [ - "faceId", + "artifactId", "id", - "sourceRange", - "type" + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "plane" ] }, - "faceId": { - "description": "The face id for the extrude plane.", + "id": { + "description": "The id of the plane.", "type": "string", "format": "uuid" }, - "tag": { - "description": "The tag.", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], - "nullable": true + ] }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "sourceRange": { - "description": "The source range.", + "origin": { + "description": "Origin of the plane.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "An extruded arc.", + "description": "A face.", "type": "object", "required": [ - "faceId", + "artifactId", "id", - "sourceRange", - "type" + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "extrudeArc" + "face" ] }, - "faceId": { - "description": "The face id for the extrude plane.", + "id": { + "description": "The id of the face.", "type": "string", "format": "uuid" }, - "tag": { - "description": "The tag.", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "includeInSnippet": true, + "description": "The scale factor for the y axis. Default is 1 if not provided.", + "labelRequired": true + }, + { + "name": "z", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, "sourceRange": { "description": "The source range.", @@ -259706,6 +249230,95 @@ } ] }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -259882,6 +249495,55 @@ } ] }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, "BasePath": { "description": "A base path.", "type": "object", @@ -260032,165 +249694,20 @@ } } }, - "required": true, + "required": false, "includeInSnippet": true, + "description": "The scale factor for the z axis. Default is 1 if not provided.", "labelRequired": true }, { - "name": "tag", - "type": "TagNode", + "name": "global", + "type": "bool", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "title": "Nullable_Boolean", + "type": "boolean", "nullable": true, "definitions": { - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, "Solid": { "type": "object", "required": [ @@ -260259,6 +249776,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -261306,6 +250827,95 @@ } ] }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -261482,6 +251092,55 @@ } ] }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, "BasePath": { "description": "A base path.", "type": "object", @@ -261633,78 +251292,453 @@ } }, "required": false, + "description": "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move.", "labelRequired": true } ], "returnValue": { "name": "", - "type": "Sketch", + "type": "SolidOrSketchOrImportedGeometry", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" + "title": "SolidOrSketchOrImportedGeometry", + "description": "Data for a solid or an imported geometry.", + "oneOf": [ + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "importedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", + { + "type": [ + "object", + "array" + ], "items": { - "$ref": "#/components/schemas/Path" + "$ref": "#/components/schemas/Solid" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "solidSet" + ] + } } }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sketchSet" + ] } - ] + } + } + ], + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } }, - "start": { - "description": "The starting path.", - "allOf": [ + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ { - "$ref": "#/components/schemas/BasePath" + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } } ] }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + "TagDeclarator": { "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 }, - "originalId": { - "type": "string", - "format": "uuid" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { "Path": { "description": "A path.", "oneOf": [ @@ -262549,38 +252583,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -262604,17 +252606,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -262768,10 +252759,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -262821,323 +252808,6 @@ } } }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, "BasePath": { "description": "A base path.", "type": "object", @@ -263295,179 +252965,451 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", - "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([10, 10], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", - "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([-10, 23], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + "// Scale a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> scale(z = 2.5)", + "// Scale an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\ncube\n |> scale(y = 2.5)", + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Scale the sweep.\nscale(parts, z = 0.5)" ] }, { - "name": "startSketchOn", - "summary": "Start a new 2-dimensional sketch on a specific plane or face.", - "description": "### Sketch on Face Behavior\n\nThere are some important behaviors to understand when sketching on a face:\n\nThe resulting sketch will _include_ the face and thus Solid that was sketched on. So say you were to export the resulting Sketch / Solid from a sketch on a face, you would get both the artifact of the sketch on the face and the parent face / Solid itself.\n\nThis is important to understand because if you were to then sketch on the resulting Solid, it would again include the face and parent Solid that was sketched on. This could go on indefinitely.\n\nThe point is if you want to export the result of a sketch on a face, you only need to export the final Solid that was created from the sketch on the face, since it will include all the parent faces and Solids.", + "name": "segAng", + "summary": "Compute the angle (in degrees) of the provided line segment.", + "description": "", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ { - "name": "data", - "type": "SketchData", + "name": "tag", + "type": "TagIdentifier", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SketchData", - "description": "Data for start sketch on. You can start a sketch on a plane or an solid.", - "anyOf": [ - { - "$ref": "#/components/schemas/PlaneData" - }, - { - "$ref": "#/components/schemas/Plane" - }, - { - "$ref": "#/components/schemas/Solid" + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [5, 10], tag = $seg01)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = 10)\n |> line(end = [-10, 0])\n |> angledLine(angle = segAng(seg01), length = -15)\n |> close()\n\nexample = extrude(exampleSketch, length = 4)" + ] + }, + { + "name": "segEnd", + "summary": "Compute the ending point of the provided line segment.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_TyF64", + "type": "array", + "items": { + "$ref": "#/components/schemas/TyF64" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "w = 15\ncube = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = radius, center = segEnd(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" + ] + }, + { + "name": "segEndX", + "summary": "Compute the ending point of the provided line segment along the 'x' axis.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TyF64", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [segEndX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "segEndY", + "summary": "Compute the ending point of the provided line segment along the 'y' axis.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TyF64", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, segEndY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "segLen", + "summary": "Compute the length of the provided line segment.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TyF64", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10, tag = $thing)\n |> tangentialArc({ offset = -120, radius = 5 }, %)\n |> angledLine(angle = -60, length = segLen(thing))\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "segStart", + "summary": "Compute the starting point of the provided line segment.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_TyF64", + "type": "array", + "items": { + "$ref": "#/components/schemas/TyF64" + }, + "maxItems": 2, + "minItems": 2, + "definitions": { + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "w = 15\ncube = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [w, 0], tag = $line1)\n |> line(end = [0, w], tag = $line2)\n |> line(end = [-w, 0], tag = $line3)\n |> line(end = [0, -w], tag = $line4)\n |> close()\n |> extrude(length = 5)\n\nfn cylinder(radius, tag) {\n return startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> circle(radius = radius, center = segStart(tag))\n |> extrude(length = radius)\n}\n\ncylinder(1, line1)\ncylinder(2, line2)\ncylinder(3, line3)\ncylinder(4, line4)" + ] + }, + { + "name": "segStartX", + "summary": "Compute the starting point of the provided line segment along the 'x' axis.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TyF64", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0], tag = $thing)\n |> line(end = [0, 5])\n |> line(end = [20 - segStartX(thing), 0])\n |> line(end = [-20, 10])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "segStartY", + "summary": "Compute the starting point of the provided line segment along the 'y' axis.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TyF64", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> line(end = [0, 3], tag = $thing)\n |> line(end = [-10, 0])\n |> line(end = [0, 20 - segStartY(thing)])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "shell", + "summary": "Remove volume from a 3-dimensional shape such that a wall of the provided thickness remains, taking volume starting at the provided face, leaving it open in that direction.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "solids", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, "definitions": { - "PlaneData": { - "description": "Orientation data that can be used to construct a plane, not a plane in itself.", - "oneOf": [ - { - "description": "The XY plane.", - "type": "string", - "enum": [ - "XY" - ] - }, - { - "description": "The opposite side of the XY plane.", - "type": "string", - "enum": [ - "-XY" - ] - }, - { - "description": "The XZ plane.", - "type": "string", - "enum": [ - "XZ" - ] - }, - { - "description": "The opposite side of the XZ plane.", - "type": "string", - "enum": [ - "-XZ" - ] - }, - { - "description": "The YZ plane.", - "type": "string", - "enum": [ - "YZ" - ] - }, - { - "description": "The opposite side of the YZ plane.", - "type": "string", - "enum": [ - "-YZ" - ] - }, - { - "description": "A defined plane.", - "type": "object", - "required": [ - "plane" - ], - "properties": { - "plane": { - "type": "object", - "required": [ - "origin", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - } - } - } - }, - "additionalProperties": false - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Plane": { + "Solid": { "type": "object", "required": [ "artifactId", + "height", "id", - "origin", + "sketch", "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "value" ], "properties": { "id": { - "description": "The id of the plane.", + "description": "The id of the solid.", "type": "string", "format": "uuid" }, "artifactId": { - "description": "The artifact ID.", + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { "$ref": "#/components/schemas/ArtifactId" @@ -263475,39 +253417,43 @@ ] }, "value": { - "$ref": "#/components/schemas/PlaneType" + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } }, - "origin": { - "description": "Origin of the plane.", + "sketch": { + "description": "The sketch.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/Sketch" } ] }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } }, "units": { "$ref": "#/components/schemas/UnitLen" @@ -263518,195 +253464,11 @@ "type": "string", "format": "uuid" }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "UnitLen": { - "description": "A unit of length.", + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", + "description": "An extrude plane.", "type": "object", "required": [ "faceId", @@ -264749,6 +254511,95 @@ } ] }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -264925,6 +254776,55 @@ } ] }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, "BasePath": { "description": "A base path.", "type": "object", @@ -265077,329 +254977,18 @@ }, "required": true, "includeInSnippet": true, - "labelRequired": true + "description": "Which solid (or solids) to shell out", + "labelRequired": false }, { - "name": "tag", - "type": "FaceTag", + "name": "thickness", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_FaceTag", - "allOf": [ - { - "$ref": "#/components/schemas/FaceTag" - } - ], - "nullable": true, + "title": "double", + "type": "number", + "format": "double", "definitions": { - "PlaneData": { - "description": "Orientation data that can be used to construct a plane, not a plane in itself.", - "oneOf": [ - { - "description": "The XY plane.", - "type": "string", - "enum": [ - "XY" - ] - }, - { - "description": "The opposite side of the XY plane.", - "type": "string", - "enum": [ - "-XY" - ] - }, - { - "description": "The XZ plane.", - "type": "string", - "enum": [ - "XZ" - ] - }, - { - "description": "The opposite side of the XZ plane.", - "type": "string", - "enum": [ - "-XZ" - ] - }, - { - "description": "The YZ plane.", - "type": "string", - "enum": [ - "YZ" - ] - }, - { - "description": "The opposite side of the YZ plane.", - "type": "string", - "enum": [ - "-YZ" - ] - }, - { - "description": "A defined plane.", - "type": "object", - "required": [ - "plane" - ], - "properties": { - "plane": { - "type": "object", - "required": [ - "origin", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane’s X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane’s Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - } - } - } - }, - "additionalProperties": false - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Plane": { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, "Solid": { "type": "object", "required": [ @@ -265468,6 +255057,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -266515,6 +256108,95 @@ } ] }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -266691,6 +256373,55 @@ } ] }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, "BasePath": { "description": "A base path.", "type": "object", @@ -266838,1964 +256569,849 @@ } } ] - }, - "FaceTag": { - "description": "A tag for a face.", - "anyOf": [ - { - "$ref": "#/components/schemas/StartOrEnd" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The thickness of the shell", + "labelRequired": true + }, + { + "name": "faces", + "type": "[FaceTag]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_FaceTag", + "type": "array", + "items": { + "$ref": "#/components/schemas/FaceTag" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" }, - { - "description": "A tag for the face.", + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { - "$ref": "#/components/schemas/TagIdentifier" + "$ref": "#/components/schemas/ArtifactId" } ] - } - ] - }, - "StartOrEnd": { - "oneOf": [ - { - "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", - "type": "string", - "enum": [ - "start" + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } ] }, - { - "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", "type": "string", - "enum": [ - "end" - ] - } - ] - } - } - }, - "required": false, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "SketchSurface", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SketchSurface", - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ], - "definitions": { - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } - ] - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n\nexampleSketch002 = startSketchOn(example, 'end')\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)\n\nexampleSketch003 = startSketchOn(example002, 'end')\n |> startProfileAt([2, 2], %)\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", - "// Sketch on the end of an extruded face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5, tagEnd = $end01)\n\nexampleSketch002 = startSketchOn(example, end01)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)\n\nexampleSketch003 = startSketchOn(example002, end02)\n |> startProfileAt([2, 2], %)\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10], tag = $sketchingFace)\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)\n\nexampleSketch002 = startSketchOn(example, sketchingFace)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close(tag = $sketchingFace002)\n\nexample002 = extrude(exampleSketch002, length = 10)\n\nexampleSketch003 = startSketchOn(example002, sketchingFace002)\n |> startProfileAt([-8, 12], %)\n |> line(end = [0, 6])\n |> line(end = [6, 0])\n |> line(end = [0, -6])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", - "exampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(exampleSketch, axis = Y, angle = 180)\n\nexampleSketch002 = startSketchOn(example, 'end')\n |> startProfileAt([4.5, -5], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", - "// Sketch on the end of a revolved face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(\n exampleSketch,\n axis = Y,\n angle = 180,\n tagEnd = $end01,\n)\n\nexampleSketch002 = startSketchOn(example, end01)\n |> startProfileAt([4.5, -5], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", - "a1 = startSketchOn({\n plane = {\n origin = { x = 0, y = 0, z = 0 },\n xAxis = { x = 1, y = 0, z = 0 },\n yAxis = { x = 0, y = 1, z = 0 },\n zAxis = { x = 0, y = 0, z = 1 }\n }\n })\n |> startProfileAt([0, 0], %)\n |> line(end = [100.0, 0])\n |> yLine(length = -100.0)\n |> xLine(length = -100.0)\n |> yLine(length = 100.0)\n |> close()\n |> extrude(length = 3.14)" - ] - }, - { - "name": "subtract", - "summary": "Subtract removes tool solids from base solids, leaving the remaining material.", - "description": "Performs a boolean subtraction operation, removing the volume of one or more tool solids from one or more base solids. The result is a new solid representing the material that remains after all tool solids have been cut away. This function is essential for machining simulations, cavity creation, and complex multi-body part modeling.", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "solids", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ { - "description": "An extrude plane.", + "description": "A base path.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "ArcThreePoint" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -268803,89 +257419,64 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } }, { - "description": "Geometry metadata.", + "description": "A path that is horizontal.", "type": "object", "required": [ - "faceId", - "id", - "sourceRange", - "type" + "__geoMeta", + "from", + "to", + "type", + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "Horizontal" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { - "description": "The tag.", + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -268893,135 +257484,18 @@ ], "nullable": true }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/GeoMeta" } ] } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ { - "description": "A path that goes to a point.", + "description": "An angled line to.", "type": "object", "required": [ "__geoMeta", @@ -269034,9 +257508,21 @@ "type": { "type": "string", "enum": [ - "ToPoint" + "AngledLineTo" ] }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, "from": { "description": "The from point.", "type": "array", @@ -269080,12 +257566,10 @@ } }, { - "description": "A arc that is tangential to the last path segment that goes to a point", + "description": "A base path.", "type": "object", "required": [ "__geoMeta", - "ccw", - "center", "from", "to", "type", @@ -269095,23 +257579,9 @@ "type": { "type": "string", "enum": [ - "TangentialArcTo" + "Base" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, "from": { "description": "The from point.", "type": "array", @@ -269155,13 +257625,14 @@ } }, { - "description": "A arc that is tangential to the last path segment", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ "__geoMeta", "ccw", "center", "from", + "radius", "to", "type", "units" @@ -269170,11 +257641,11 @@ "type": { "type": "string", "enum": [ - "TangentialArc" + "Arc" ] }, "center": { - "description": "the arc's center", + "description": "Center of the circle that this arc is drawn on.", "type": "array", "items": { "type": "number", @@ -269183,549 +257654,13 @@ "maxItems": 2, "minItems": 2 }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", + "description": "True if the arc is counterclockwise.", "type": "boolean" }, "from": { @@ -270233,3193 +258168,1628 @@ } } ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solids to use as the base to subtract from.", - "labelRequired": false - }, - { - "name": "tools", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + }, + "FaceTag": { + "description": "A tag for a face.", + "anyOf": [ + { + "$ref": "#/components/schemas/StartOrEnd" }, - "sketch": { - "description": "The sketch.", + { + "description": "A tag for the face.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/TagIdentifier" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" + ] }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "StartOrEnd": { "oneOf": [ { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "start" + ] }, { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", + "type": "string", + "enum": [ + "end" + ] } ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The faces you want removed", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solids to subtract.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { - "description": "An extrude plane.", "type": "object", "required": [ - "faceId", + "artifactId", "id", - "sourceRange", - "type" + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "plane" ] }, - "faceId": { - "description": "The face id for the extrude plane.", + "id": { + "description": "The id of the plane.", "type": "string", "format": "uuid" }, - "tag": { - "description": "The tag.", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], - "nullable": true + ] }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "sourceRange": { - "description": "The source range.", + "origin": { + "description": "Origin of the plane.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/Point3d" } ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" }, - "tag": { - "description": "The tag.", + "xAxis": { + "description": "What should the plane's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "sourceRange": { - "description": "The source range.", + "zAxis": { + "description": "The z-axis (normal).", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/Point3d" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "Geometry metadata.", + "description": "A face.", "type": "object", "required": [ - "faceId", + "artifactId", "id", - "sourceRange", - "type" + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "face" ] }, - "faceId": { - "description": "The id for the chamfer surface.", + "id": { + "description": "The id of the face.", "type": "string", "format": "uuid" }, - "tag": { - "description": "The tag.", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], - "nullable": true + ] }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "value": { + "description": "The tag of the face.", + "type": "string" }, - "sourceRange": { - "description": "The source range.", + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/Point3d" } ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" }, - "tag": { - "description": "The tag.", + "yAxis": { + "description": "What should the face's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "sourceRange": { - "description": "The source range.", + "solid": { + "description": "The solid the face is on.", "allOf": [ { - "$ref": "#/components/schemas/SourceRange" + "$ref": "#/components/schemas/Solid" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } } ] }, - "TagDeclarator": { + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { "type": "object", "required": [ - "value" + "x", + "y", + "z" ], "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true + "x": { + "type": "number", + "format": "double" }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "y": { + "type": "number", + "format": "double" }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "z": { + "type": "number", + "format": "double" } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", + "__geoMeta", + "from", + "to", "units" ], "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "paths": { - "description": "The paths in the sketch.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/Path" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "start": { - "description": "The starting path.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/BasePath" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } + ], + "nullable": true }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "Path": { - "description": "A path.", + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "A path that goes to a point.", + "description": "A fillet.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "edgeId", + "id", + "radius", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "fillet" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { + "id": { + "description": "The id of the engine command that called this fillet.", "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "format": "uuid" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "radius": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "format": "uuid" }, "tag": { - "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] } } }, { - "description": "a complete arc", + "description": "A chamfer.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" + "edgeId", + "id", + "length", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Circle" + "chamfer" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" }, - "radius": { - "description": "the arc's radius", + "length": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "format": "uuid" }, "tag": { "allOf": [ @@ -273440,156 +259810,806 @@ "labelRequired": true }, "unpublished": false, - "deprecated": true, + "deprecated": false, "examples": [ - "// Subtract a cylinder from a cube using the stdlib functions.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 10)\n\nsubtractedPart = subtract([part001], tools = [part002])", - "// Subtract a cylinder from a cube using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> extrude(length = 10)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002" + "// Remove the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the end face for the extrusion.\nshell(firstSketch, faces = ['end'], thickness = 0.25)", + "// Remove the start face for the extrusion.\nfirstSketch = startSketchOn(-XZ)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0])\n |> close()\n |> extrude(length = 6)\n\n// Remove the start face for the extrusion.\nshell(firstSketch, faces = ['start'], thickness = 0.25)", + "// Remove a tagged face and the end face for the extrusion.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face for the extrusion.\nshell(firstSketch, faces = [myTag], thickness = 0.25)", + "// Remove multiple faces at once.\nfirstSketch = startSketchOn(XY)\n |> startProfileAt([-12, 12], %)\n |> line(end = [24, 0])\n |> line(end = [0, -24])\n |> line(end = [-24, 0], tag = $myTag)\n |> close()\n |> extrude(length = 6)\n\n// Remove a tagged face and the end face for the extrusion.\nshell(firstSketch, faces = [myTag, 'end'], thickness = 0.25)", + "// Shell a sketch on face.\nsize = 100\ncase = startSketchOn(-XZ)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"case\" in the shell function to shell the entire object.\nshell(case, faces = ['start'], thickness = 5)", + "// Shell a sketch on face object on the end face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" in the shell function to shell the end face of the object.\nshell(thing1, faces = ['end'], thickness = 5)", + "// Shell sketched on face objects on the end face, include all sketches to shell\n// the entire object.\n\n\nsize = 100\ncase = startSketchOn(XY)\n |> startProfileAt([-size, -size], %)\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArcTo([-size, size], %)\n |> close()\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, 'end')\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, 'end')\n |> circle(center = [size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\n// We put \"thing1\" and \"thing2\" in the shell function to shell the end face of the object.\nshell([thing1, thing2], faces = ['end'], thickness = 5)" ] }, { - "name": "sweep", - "summary": "Extrude a sketch along a path.", - "description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its path. This is useful for creating more complex shapes that can't be created with a simple extrusion.\n\nYou can provide more than one sketch to sweep, and they will all be swept along the same path.", + "name": "sqrt", + "summary": "Compute the square root of a number.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = sqrt(2500))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "startProfileAt", + "summary": "Start a new profile at a given point.", + "description": "", "tags": [], - "keywordArguments": true, + "keywordArguments": false, "args": [ { - "name": "sketches", - "type": "[Sketch]", + "name": "to", + "type": "[number]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Sketch", + "title": "Array_size_2_of_double", "type": "array", "items": { - "$ref": "#/components/schemas/Sketch" + "type": "number", + "format": "double" }, - "definitions": { - "Sketch": { + "maxItems": 2, + "minItems": 2 + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "sketchSurface", + "type": "SketchSurface", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SketchSurface", + "description": "A sketch type.", + "oneOf": [ + { "type": "object", "required": [ "artifactId", "id", - "on", - "originalId", - "paths", - "start", - "units" + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "description": "The id of the plane.", "type": "string", "format": "uuid" }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/SketchSurface" + "$ref": "#/components/schemas/ArtifactId" } ] }, - "start": { - "description": "The starting path.", + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", "allOf": [ { - "$ref": "#/components/schemas/BasePath" + "$ref": "#/components/schemas/Point3d" } ] }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "yAxis": { + "description": "What should the plane's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/Point3d" } ] }, - "originalId": { - "type": "string", - "format": "uuid" + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ], + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, { "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", @@ -274283,127 +261303,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -274427,17 +261326,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -274591,227 +261479,119 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "x", - "y", - "z" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "x": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "y": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + ], + "nullable": true }, - "sketch": { - "description": "The sketch.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] + "radius": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The face id for the extrude plane.", + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } }, { - "description": "Geometry metadata.", + "description": "A chamfer.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "length", "type" ], "properties": { @@ -274821,37 +261601,266 @@ "chamfer" ] }, - "faceId": { - "description": "The id for the chamfer surface.", + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "tag", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" ] } } }, { - "description": "Geometry metadata.", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ "faceId", @@ -274863,11 +261872,11 @@ "type": { "type": "string", "enum": [ - "fillet" + "extrudePlane" ] }, "faceId": { - "description": "The id for the fillet surface.", + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, @@ -274894,59 +261903,59 @@ ] } } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ + }, { - "description": "A fillet.", + "description": "An extruded arc.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "radius", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "extrudeArc" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } }, { - "description": "A chamfer.", + "description": "Geometry metadata.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "length", + "sourceRange", "type" ], "properties": { @@ -274956,118 +261965,125 @@ "chamfer" ] }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, "id": { - "description": "The id of the engine command that called this chamfer.", + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "length": { - "type": "number", - "format": "double" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + "faceId": { + "description": "The id for the fillet surface.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } } ] }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The sketch or set of sketches that should be swept in space", - "labelRequired": false - }, - { - "name": "path", - "type": "SweepPath", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SweepPath", - "description": "A path to sweep along.", - "anyOf": [ - { - "$ref": "#/components/schemas/Sketch" + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 }, - { - "$ref": "#/components/schemas/Helix" - } - ], - "definitions": { "Sketch": { "type": "object", "required": [ @@ -275887,127 +262903,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -276031,17 +262926,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -276195,311 +263079,68 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "x", - "y", - "z" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "x": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "y": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + ], + "nullable": true }, - "sketch": { - "description": "The sketch.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } - ] + } }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -276585,1479 +263226,2084 @@ } } ] - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } } } }, - "required": true, - "includeInSnippet": true, - "description": "The path to sweep the sketch along", + "required": false, "labelRequired": true - }, - { - "name": "sectional", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { "type": "integer", - "format": "uint", + "format": "uint8", "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", "format": "uint", "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", + "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([10, 10], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)", + "exampleSketch = startSketchOn(-XZ)\n |> startProfileAt([-10, 23], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "startSketchOn", + "summary": "Start a new 2-dimensional sketch on a specific plane or face.", + "description": "### Sketch on Face Behavior\n\nThere are some important behaviors to understand when sketching on a face:\n\nThe resulting sketch will _include_ the face and thus Solid that was sketched on. So say you were to export the resulting Sketch / Solid from a sketch on a face, you would get both the artifact of the sketch on the face and the parent face / Solid itself.\n\nThis is important to understand because if you were to then sketch on the resulting Solid, it would again include the face and parent Solid that was sketched on. This could go on indefinitely.\n\nThe point is if you want to export the result of a sketch on a face, you only need to export the final Solid that was created from the sketch on the face, since it will include all the parent faces and Solids.", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "data", + "type": "SketchData", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SketchData", + "description": "Data for start sketch on. You can start a sketch on a plane or an solid.", + "anyOf": [ + { + "$ref": "#/components/schemas/PlaneData" + }, + { + "$ref": "#/components/schemas/Plane" + }, + { + "$ref": "#/components/schemas/Solid" + } + ], + "definitions": { + "PlaneData": { + "description": "Orientation data that can be used to construct a plane, not a plane in itself.", + "oneOf": [ + { + "description": "The XY plane.", + "type": "string", + "enum": [ + "XY" + ] + }, + { + "description": "The opposite side of the XY plane.", + "type": "string", + "enum": [ + "-XY" + ] + }, + { + "description": "The XZ plane.", + "type": "string", + "enum": [ + "XZ" + ] + }, + { + "description": "The opposite side of the XZ plane.", + "type": "string", + "enum": [ + "-XZ" + ] + }, + { + "description": "The YZ plane.", + "type": "string", + "enum": [ + "YZ" + ] + }, + { + "description": "The opposite side of the YZ plane.", + "type": "string", + "enum": [ + "-YZ" + ] + }, + { + "description": "A defined plane.", + "type": "object", + "required": [ + "plane" + ], + "properties": { + "plane": { + "type": "object", + "required": [ + "origin", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] } + } + } + }, + "additionalProperties": false + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" ] } } }, { - "description": "Geometry metadata.", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", "type": "object", "required": [ "faceId", @@ -278069,11 +265315,11 @@ "type": { "type": "string", "enum": [ - "chamfer" + "extrudePlane" ] }, "faceId": { - "description": "The id for the chamfer surface.", + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, @@ -278102,7 +265348,7 @@ } }, { - "description": "Geometry metadata.", + "description": "An extruded arc.", "type": "object", "required": [ "faceId", @@ -278114,11 +265360,11 @@ "type": { "type": "string", "enum": [ - "fillet" + "extrudeArc" ] }, "faceId": { - "description": "The id for the fillet surface.", + "description": "The face id for the extrude plane.", "type": "string", "format": "uuid" }, @@ -278145,223 +265391,142 @@ ] } } - } - ] - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ + }, { - "description": "A fillet.", + "description": "Geometry metadata.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "radius", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "chamfer" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", + "faceId": { + "description": "The id for the chamfer surface.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } }, { - "description": "A chamfer.", + "description": "Geometry metadata.", "type": "object", "required": [ - "edgeId", + "faceId", "id", - "length", + "sourceRange", "type" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "fillet" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + "faceId": { + "description": "The id for the fillet surface.", "type": "string", "format": "uuid" }, "tag": { + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } } } ] }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - } - }, - "required": false, - "description": "If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components.", - "labelRequired": true - }, - { - "name": "tolerance", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, - "definitions": { "Sketch": { "type": "object", "required": [ @@ -279181,127 +266346,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -279325,17 +266369,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -279489,34 +266522,270 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } }, - "PlaneType": { - "description": "Type for a plane.", + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "tag", + "type": "FaceTag", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_FaceTag", + "allOf": [ + { + "$ref": "#/components/schemas/FaceTag" + } + ], + "nullable": true, + "definitions": { + "PlaneData": { + "description": "Orientation data that can be used to construct a plane, not a plane in itself.", "oneOf": [ { + "description": "The XY plane.", "type": "string", "enum": [ - "XY", - "XZ", - "YZ" + "XY" ] }, { - "description": "A custom plane.", + "description": "The opposite side of the XY plane.", "type": "string", "enum": [ - "Custom" + "-XY" ] }, { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "description": "The XZ plane.", "type": "string", "enum": [ - "Uninit" + "XZ" ] + }, + { + "description": "The opposite side of the XZ plane.", + "type": "string", + "enum": [ + "-XZ" + ] + }, + { + "description": "The YZ plane.", + "type": "string", + "enum": [ + "YZ" + ] + }, + { + "description": "The opposite side of the YZ plane.", + "type": "string", + "enum": [ + "-YZ" + ] + }, + { + "description": "A defined plane.", + "type": "object", + "required": [ + "plane" + ], + "properties": { + "plane": { + "type": "object", + "required": [ + "origin", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + } + } + } + }, + "additionalProperties": false } ] }, @@ -279542,6 +266811,192 @@ } } }, + "Plane": { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, "Solid": { "type": "object", "required": [ @@ -279795,223 +267250,49 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "BasePath": { - "description": "A base path.", + "TagDeclarator": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "units" + "value" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "type": "string" }, - "to": { - "description": "The to point.", + "digest": { "type": "array", "items": { - "type": "number", - "format": "double" + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "maxItems": 32, + "minItems": 32, "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - } - }, - "required": false, - "description": "Tolerance for this operation", - "labelRequired": true - }, - { - "name": "tagStart", - "type": "TagNode", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true, - "definitions": { "Sketch": { "type": "object", "required": [ @@ -280831,127 +268112,6 @@ } ] }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -280975,17 +268135,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -281139,311 +268288,68 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "x", - "y", - "z" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "x": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "y": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + ], + "nullable": true }, - "sketch": { - "description": "The sketch.", + "__geoMeta": { + "description": "Metadata.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/GeoMeta" } ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } - ] + } }, "EdgeCut": { "description": "A fillet or a chamfer.", @@ -281530,662 +268436,1918 @@ } ] }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "FaceTag": { + "description": "A tag for a face.", + "anyOf": [ + { + "$ref": "#/components/schemas/StartOrEnd" }, - "__geoMeta": { - "description": "Metadata.", + { + "description": "A tag for the face.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/TagIdentifier" } ] } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } + ] }, - "Helix": { - "description": "A helix.", - "type": "object", - "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" - ], - "properties": { - "value": { - "description": "The id of the helix.", + "StartOrEnd": { + "oneOf": [ + { + "description": "The start face as in before you extruded. This could also be known as the bottom face. But we do not call it bottom because it would be the top face if you extruded it in the opposite direction or flipped the camera.", "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } + "enum": [ + "start" ] }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", + { + "description": "The end face after you extruded. This could also be known as the top face. But we do not call it top because it would be the bottom face if you extruded it in the opposite direction or flipped the camera.", "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "enum": [ + "end" + ] } - } + ] } } }, "required": false, - "description": "A named tag for the face at the start of the sweep, i.e. the original sketch", "labelRequired": true - }, - { - "name": "tagEnd", - "type": "TagNode", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true, - "definitions": { - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" + } + ], + "returnValue": { + "name": "", + "type": "SketchSurface", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SketchSurface", + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ], + "definitions": { + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { - "description": "the arc's radius", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5)\n\nexampleSketch002 = startSketchOn(example, 'end')\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)\n\nexampleSketch003 = startSketchOn(example002, 'end')\n |> startProfileAt([2, 2], %)\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", + "// Sketch on the end of an extruded face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10])\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 5, tagEnd = $end01)\n\nexampleSketch002 = startSketchOn(example, end01)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)\n\nexampleSketch003 = startSketchOn(example002, end02)\n |> startProfileAt([2, 2], %)\n |> line(end = [6, 0])\n |> line(end = [0, 6])\n |> line(end = [-6, 0])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", + "exampleSketch = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> line(end = [0, 10], tag = $sketchingFace)\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)\n\nexampleSketch002 = startSketchOn(example, sketchingFace)\n |> startProfileAt([1, 1], %)\n |> line(end = [8, 0])\n |> line(end = [0, 8])\n |> line(end = [-8, 0])\n |> close(tag = $sketchingFace002)\n\nexample002 = extrude(exampleSketch002, length = 10)\n\nexampleSketch003 = startSketchOn(example002, sketchingFace002)\n |> startProfileAt([-8, 12], %)\n |> line(end = [0, 6])\n |> line(end = [6, 0])\n |> line(end = [0, -6])\n |> close()\n\nexample003 = extrude(exampleSketch003, length = 5)", + "exampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(exampleSketch, axis = Y, angle = 180)\n\nexampleSketch002 = startSketchOn(example, 'end')\n |> startProfileAt([4.5, -5], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", + "// Sketch on the end of a revolved face by tagging the end face.\n\n\nexampleSketch = startSketchOn(XY)\n |> startProfileAt([4, 12], %)\n |> line(end = [2, 0])\n |> line(end = [0, -6])\n |> line(end = [4, -6])\n |> line(end = [0, -6])\n |> line(end = [-3.75, -4.5])\n |> line(end = [0, -5.5])\n |> line(end = [-2, 0])\n |> close()\n\nexample = revolve(\n exampleSketch,\n axis = Y,\n angle = 180,\n tagEnd = $end01,\n)\n\nexampleSketch002 = startSketchOn(example, end01)\n |> startProfileAt([4.5, -5], %)\n |> line(end = [0, 5])\n |> line(end = [5, 0])\n |> line(end = [0, -5])\n |> close()\n\nexample002 = extrude(exampleSketch002, length = 5)", + "a1 = startSketchOn({\n plane = {\n origin = { x = 0, y = 0, z = 0 },\n xAxis = { x = 1, y = 0, z = 0 },\n yAxis = { x = 0, y = 1, z = 0 },\n zAxis = { x = 0, y = 0, z = 1 }\n }\n })\n |> startProfileAt([0, 0], %)\n |> line(end = [100.0, 0])\n |> yLine(length = -100.0)\n |> xLine(length = -100.0)\n |> yLine(length = 100.0)\n |> close()\n |> extrude(length = 3.14)" + ] + }, + { + "name": "subtract", + "summary": "Subtract removes tool solids from base solids, leaving the remaining material.", + "description": "Performs a boolean subtraction operation, removing the volume of one or more tool solids from one or more base solids. The result is a new solid representing the material that remains after all tool solids have been cut away. This function is essential for machining simulations, cavity creation, and complex multi-body part modeling.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "solids", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "extrudePlane" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -282193,64 +270355,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A path that is horizontal.", + "description": "An extruded arc.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "extrudeArc" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -282258,70 +270400,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "An angled line to.", + "description": "Geometry metadata.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "chamfer" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -282329,31 +270445,803 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "A base path.", + "description": "Geometry metadata.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Base" + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" ] }, "from": { @@ -282570,38 +271458,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -282625,17 +271481,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -282789,10 +271634,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -282842,6 +271683,172 @@ } } }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The solids to use as the base to subtract from.", + "labelRequired": false + }, + { + "name": "tools", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { "Solid": { "type": "object", "required": [ @@ -282910,6 +271917,10 @@ } } }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, "ExtrudeSurface": { "description": "An extrude surface.", "oneOf": [ @@ -283095,2270 +272106,2002 @@ } ] }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "A chamfer.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "edgeId", - "id", - "length", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { "type": "string", - "format": "uuid" + "enum": [ + "TangentialArc" + ] }, - "length": { + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { "type": "string", - "format": "uuid" + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } } ] }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } }, - "units": { - "$ref": "#/components/schemas/UnitLen" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] } + } + }, + { + "type": "object", + "required": [ + "type" ], - "nullable": true + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + } } - } + ] }, - "Helix": { - "description": "A helix.", + "GeoMeta": { + "description": "Geometry metadata.", "type": "object", "required": [ - "angleStart", - "artifactId", - "ccw", - "revolutions", - "units", - "value" + "id", + "sourceRange" ], "properties": { - "value": { - "description": "The id of the helix.", + "id": { + "description": "The id of the geometry.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "revolutions": { - "description": "Number of revolutions.", - "type": "number", - "format": "double" - }, - "angleStart": { - "description": "Start angle (in degrees).", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "Is the helix rotation counter clockwise?", - "type": "boolean" - }, - "cylinderId": { - "description": "The cylinder the helix was created on.", - "type": "string", - "format": "uuid", - "nullable": true - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } - } - } - }, - "required": false, - "description": "A named tag for the face at the end of the sweep", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "[Solid]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + "maxItems": 2, + "minItems": 2 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "length": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The solids to subtract.", + "labelRequired": true + }, + { + "name": "tolerance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Create a pipe using a sweep.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)", - "// Create a spring by sweeping around a helix path.\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = Z,\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn(YZ)\n |> circle(center = [0, 0], radius = 1)\n |> sweep(path = helixPath)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nsweep([rectangleSketch, circleSketch], path = sweepPath)", - "// Sectionally sweep one sketch along the path\n\n\nsketch001 = startSketchOn(XY)\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nsweep(circleSketch, path = sweepPath, sectional = true)" - ] - }, - { - "name": "tangentToEnd", - "summary": "Returns the angle coming out of the end of the segment in degrees.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "tag", - "type": "TagIdentifier", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TagIdentifier", - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The line segment being queried by its tag", - "labelRequired": false - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Horizontal pill.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> tangentialArcToRelative([0, 10], %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArcToRelative([0, -10], %)\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", - "// Vertical pill. Use absolute coordinate for arc.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> tangentialArcTo([10, 20], %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArcToRelative([-10, 0], %)\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", - "rectangleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0], tag = $seg1)\n |> angledLine(angle = tangentToEnd(seg1), length = 10)\n |> line(end = [0, 10])\n |> line(end = [-20, 0])\n |> close()\n\nrectangleExtrude = extrude(rectangleSketch, length = 10)", - "bottom = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> arcTo({ end = [10, 10], interior = [5, 1] }, %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> close()", - "circSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 3, tag = $circ)\n\ntriangleSketch = startSketchOn(XY)\n |> startProfileAt([-5, 0], %)\n |> angledLine(angle = tangentToEnd(circ), length = 10)\n |> line(end = [-15, 0])\n |> close()" - ] - }, - { - "name": "tangentialArc", - "summary": "Draw a curved line segment along part of an imaginary circle.", - "description": "The arc is constructed such that the last line segment is placed tangent to the imaginary circle of the specified radius. The resulting arc is the segment of the imaginary circle from that tangent point for 'offset' degrees along the imaginary circle.", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "data", - "type": "TangentialArcData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "TangentialArcData", - "description": "Data to draw a tangential arc.", - "anyOf": [ - { - "type": "object", - "required": [ - "offset", - "radius" - ], - "properties": { - "radius": { - "description": "Radius of the arc. Not to be confused with Raiders of the Lost Ark.", - "type": "number", - "format": "double" - }, - "offset": { - "description": "Offset of the arc, in degrees.", - "type": "number", - "format": "double" - } - } - } - ] - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } }, { @@ -285912,38 +274655,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -285967,17 +274678,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -286131,10 +274831,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -286184,364 +274880,47 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "description": "The extrude surfaces.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "sketch": { - "description": "The sketch.", + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + ], + "nullable": true }, "__geoMeta": { "description": "Metadata.", @@ -286651,735 +275030,1719 @@ } } }, - "required": true, - "includeInSnippet": true, + "required": false, + "description": "The tolerance to use for the subtraction operation.", "labelRequired": true - }, - { - "name": "tag", - "type": "TagNode", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + } + ], + "returnValue": { + "name": "", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - ], - "nullable": true, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "from": { + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Subtract a cylinder from a cube using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nsubtractedPart = subtract([part001], tools = [part002])", + "// Subtract a cylinder from a cube using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002" + ] + }, + { + "name": "sweep", + "summary": "Extrude a sketch along a path.", + "description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its path. This is useful for creating more complex shapes that can't be created with a simple extrusion.\n\nYou can provide more than one sketch to sweep, and they will all be swept along the same path.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "sketches", + "type": "[Sketch]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Sketch", + "type": "array", + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { "description": "The from point.", "type": "array", "items": { @@ -287420,122 +276783,813 @@ ] } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ + }, { + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Mm" + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "A arc that is tangential to the last path segment", "type": "object", "required": [ - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Cm" + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "a complete arc", "type": "object", "required": [ - "type" + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "M" + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "A base path.", "type": "object", "required": [ - "type" + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Inches" + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "A base path.", "type": "object", "required": [ - "type" + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "Feet" + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, { + "description": "A path that is horizontal.", "type": "object", "required": [ - "type" + "__geoMeta", + "from", + "to", + "type", + "units", + "x" ], "properties": { "type": { "type": "string", "enum": [ - "Yards" + "Horizontal" ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 }, "end": { "type": "integer", @@ -288037,69 +278091,90 @@ } ] }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } } - } + ] }, "BasePath": { "description": "A base path.", @@ -288163,1873 +278238,804 @@ "type": "string" } } + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The sketch or set of sketches that should be swept in space", + "labelRequired": false + }, + { + "name": "path", + "type": "SweepPath", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SweepPath", + "description": "A path to sweep along.", + "anyOf": [ + { + "$ref": "#/components/schemas/Sketch" + }, + { + "$ref": "#/components/schemas/Helix" + } + ], + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "Path": { + "description": "A path.", "oneOf": [ { - "description": "A fillet.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "edgeId", - "id", - "radius", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "ToPoint" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "radius": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "A chamfer.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "edgeId", - "id", - "length", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "length": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - } - ] - } - } - }, - "required": false, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10)\n |> tangentialArc({ radius = 10, offset = -120 }, %)\n |> angledLine(angle = -60, length = 10)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" - ] - }, - { - "name": "tangentialArcTo", - "summary": "Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches the desired (x, y) coordinates.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "to", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" }, "from": { "description": "The from point.", @@ -290072,713 +279078,22 @@ ] } } - }, + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ { - "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" + "type" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" + "Mm" ] } } @@ -291380,133 +279695,6 @@ } ] }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, "EdgeCut": { "description": "A fillet or a chamfer.", "oneOf": [ @@ -291591,26 +279779,200 @@ } } ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } } } }, "required": true, "includeInSnippet": true, + "description": "The path to sweep the sketch along", "labelRequired": true }, { - "name": "tag", - "type": "TagNode", + "name": "sectional", + "type": "bool", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], + "title": "Nullable_Boolean", + "type": "boolean", "nullable": true, "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, "Path": { "description": "A path.", "oneOf": [ @@ -292980,69 +281342,90 @@ } ] }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + } } - } + ] }, "BasePath": { "description": "A base path.", @@ -293107,2070 +281490,2003 @@ } } }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + } + }, + "required": false, + "description": "If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components.", + "labelRequired": true + }, + { + "name": "tolerance", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", "oneOf": [ { - "description": "A fillet.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "edgeId", - "id", - "radius", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "ToPoint" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "radius": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "A chamfer.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "edgeId", - "id", - "length", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "length": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - } - ] - } - } - }, - "required": false, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { "type": "integer", - "format": "uint8", + "format": "uint", "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { "type": "integer", "format": "uint", "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "maxItems": 3, + "minItems": 3 }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10)\n |> tangentialArcTo([15, 15], %)\n |> line(end = [10, -15])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" - ] - }, - { - "name": "tangentialArcToRelative", - "summary": "Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches a point the given (x, y) distance away.", - "description": "", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "delta", - "type": "[number]", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_2_of_double", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", + "SketchSurface": { + "description": "A sketch type.", "oneOf": [ { - "description": "A path that goes to a point.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "origin", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "ToPoint" + "plane" ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "tag": { - "description": "The tag of the path.", + "origin": { + "description": "Origin of the plane.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "xAxis": { + "description": "What should the plane's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" } ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" }, - "tag": { - "description": "The tag of the path.", + "yAxis": { + "description": "What should the plane's Y axis be?", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "zAxis": { + "description": "The z-axis (normal).", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A arc that is tangential to the last path segment", + "description": "A face.", "type": "object", "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", + "artifactId", + "id", + "solid", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "TangentialArc" + "face" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" }, - "ccw": { - "description": "arc's direction", - "type": "boolean" + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "description": "The tag of the face.", + "type": "string" }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "tag": { - "description": "The tag of the path.", + "zAxis": { + "description": "The z-axis (normal).", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/Point3d" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "solid": { + "description": "The solid the face is on.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Solid" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] }, { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + } + }, + "required": false, + "description": "Tolerance for this operation", + "labelRequired": true + }, + { + "name": "tagStart", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", "ccw", "center", "from", @@ -296323,133 +284639,6 @@ } ] }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, "EdgeCut": { "description": "A fillet or a chamfer.", "oneOf": [ @@ -296534,96 +284723,273 @@ } } ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "tag", - "type": "TagNode", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + } + }, + "required": false, + "description": "A named tag for the face at the start of the sweep, i.e. the original sketch", + "labelRequired": true + }, + { + "name": "tagEnd", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", "to", "type", "units" @@ -297923,133 +286289,6 @@ } ] }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, "EdgeCut": { "description": "A fillet or a chamfer.", "oneOf": [ @@ -298134,82 +286373,502 @@ } } ] + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "Helix": { + "description": "A helix.", + "type": "object", + "required": [ + "angleStart", + "artifactId", + "ccw", + "revolutions", + "units", + "value" + ], + "properties": { + "value": { + "description": "The id of the helix.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "revolutions": { + "description": "Number of revolutions.", + "type": "number", + "format": "double" + }, + "angleStart": { + "description": "Start angle (in degrees).", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "Is the helix rotation counter clockwise?", + "type": "boolean" + }, + "cylinderId": { + "description": "The cylinder the helix was created on.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } } } }, "required": false, + "description": "A named tag for the face at the end of the sweep", "labelRequired": true } ], "returnValue": { "name": "", - "type": "Sketch", + "type": "[Solid]", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { "type": "string", "format": "uuid" }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, { - "$ref": "#/components/schemas/BasePath" + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } } ] }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", + "TagDeclarator": { "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 }, - "originalId": { - "type": "string", - "format": "uuid" + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { "Path": { "description": "A path.", "oneOf": [ @@ -299054,38 +287713,6 @@ } ] }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, "GeoMeta": { "description": "Geometry metadata.", "type": "object", @@ -299109,17 +287736,6 @@ } } }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, "SketchSurface": { "description": "A sketch type.", "oneOf": [ @@ -299273,10 +287889,6 @@ } ] }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, "PlaneType": { "description": "Type for a plane.", "oneOf": [ @@ -299326,174 +287938,119 @@ } } }, - "Solid": { + "BasePath": { + "description": "A base path.", "type": "object", "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "value": { - "description": "The extrude surfaces.", + "to": { + "description": "The to point.", "type": "array", "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "sketch": { - "description": "The sketch.", + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", "allOf": [ { - "$ref": "#/components/schemas/Sketch" + "$ref": "#/components/schemas/TagDeclarator" } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", + ], "nullable": true }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, - "ExtrudeSurface": { - "description": "An extrude surface.", + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", "oneOf": [ { - "description": "An extrude plane.", + "description": "A fillet.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "radius", "type" ], "properties": { "type": { "type": "string", "enum": [ - "extrudePlane" + "fillet" ] }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this fillet.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] + "radius": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The face id for the extrude plane.", + "edgeId": { + "description": "The engine id of the edge to fillet.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } } }, { - "description": "Geometry metadata.", + "description": "A chamfer.", "type": "object", "required": [ - "faceId", + "edgeId", "id", - "sourceRange", + "length", "type" ], "properties": { @@ -299503,503 +288060,16738 @@ "chamfer" ] }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, "id": { - "description": "The id of the geometry.", + "description": "The id of the engine command that called this chamfer.", "type": "string", "format": "uuid" }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] + "length": { + "type": "number", + "format": "double" }, - "faceId": { - "description": "The id for the fillet surface.", + "edgeId": { + "description": "The engine id of the edge to chamfer.", "type": "string", "format": "uuid" }, "tag": { - "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Create a pipe using a sweep.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)", + "// Create a spring by sweeping around a helix path.\n\n// Create a helix around the Z axis.\nhelixPath = helix(\n angleStart = 0,\n ccw = true,\n revolutions = 4,\n length = 10,\n radius = 5,\n axis = Z,\n)\n\n// Create a spring by sweeping around the helix path.\nspringSketch = startSketchOn(YZ)\n |> circle(center = [0, 0], radius = 1)\n |> sweep(path = helixPath)", + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nsweep([rectangleSketch, circleSketch], path = sweepPath)", + "// Sectionally sweep one sketch along the path\n\n\nsketch001 = startSketchOn(XY)\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nsweep(circleSketch, path = sweepPath, sectional = true)" + ] + }, + { + "name": "tangentToEnd", + "summary": "Returns the angle coming out of the end of the segment in degrees.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "tag", + "type": "TagIdentifier", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TagIdentifier", + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "required": true, + "includeInSnippet": true, + "description": "The line segment being queried by its tag", + "labelRequired": false + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Horizontal pill.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> tangentialArcToRelative([0, 10], %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArcToRelative([0, -10], %)\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", + "// Vertical pill. Use absolute coordinate for arc.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> tangentialArcTo([10, 20], %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArcToRelative([-10, 0], %)\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", + "rectangleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0], tag = $seg1)\n |> angledLine(angle = tangentToEnd(seg1), length = 10)\n |> line(end = [0, 10])\n |> line(end = [-20, 0])\n |> close()\n\nrectangleExtrude = extrude(rectangleSketch, length = 10)", + "bottom = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> arcTo({ end = [10, 10], interior = [5, 1] }, %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> close()", + "circSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 3, tag = $circ)\n\ntriangleSketch = startSketchOn(XY)\n |> startProfileAt([-5, 0], %)\n |> angledLine(angle = tangentToEnd(circ), length = 10)\n |> line(end = [-15, 0])\n |> close()" + ] + }, + { + "name": "tangentialArc", + "summary": "Draw a curved line segment along part of an imaginary circle.", + "description": "The arc is constructed such that the last line segment is placed tangent to the imaginary circle of the specified radius. The resulting arc is the segment of the imaginary circle from that tangent point for 'offset' degrees along the imaginary circle.", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "data", + "type": "TangentialArcData", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "TangentialArcData", + "description": "Data to draw a tangential arc.", + "anyOf": [ + { + "type": "object", + "required": [ + "offset", + "radius" + ], + "properties": { + "radius": { + "description": "Radius of the arc. Not to be confused with Raiders of the Lost Ark.", + "type": "number", + "format": "double" + }, + "offset": { + "description": "Offset of the arc, in degrees.", + "type": "number", + "format": "double" + } + } + } + ] + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "sketch", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "tag", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10)\n |> tangentialArc({ radius = 10, offset = -120 }, %)\n |> angledLine(angle = -60, length = 10)\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + ] + }, + { + "name": "tangentialArcTo", + "summary": "Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches the desired (x, y) coordinates.", + "description": "", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "to", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "sketch", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "tag", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 60, length = 10)\n |> tangentialArcTo([15, 15], %)\n |> line(end = [10, -15])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + ] + }, + { + "name": "tangentialArcToRelative", + "summary": "Starting at the current sketch's origin, draw a curved line segment along some part of an imaginary circle until it reaches a point the given (x, y) distance away.", + "description": "", + "tags": [], + "keywordArguments": false, + "args": [ + { + "name": "delta", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_size_2_of_double", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "sketch", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + { + "name": "tag", + "type": "TagNode", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TagDeclarator", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "Sketch", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Sketch", + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + }, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 45, length = 10)\n |> tangentialArcToRelative([0, -10], %)\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" + ] + }, + { + "name": "tau", + "summary": "Return the value of `tau`. The full circle constant (Ï„). Equal to 2Ï€.", + "description": "**DEPRECATED** use the constant TAU", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": true, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 10 * tau())\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "toDegrees", + "summary": "Converts a number from radians to degrees.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 70 * cos(toDegrees(pi() / 4)))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "toRadians", + "summary": "Converts a number from degrees to radians.", + "description": "", + "tags": [ + "math" + ], + "keywordArguments": false, + "args": [ + { + "name": "num", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "double", + "type": "number", + "format": "double" + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 70 * cos(toRadians(45)))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" + ] + }, + { + "name": "translate", + "summary": "Move a solid or a sketch.", + "description": "This is really useful for assembling parts together. You can create a part and then move it to the correct location.\n\nTranslate is really useful for sketches if you want to move a sketch and then rotate it using the `rotate` function to create a loft.", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "objects", + "type": "SolidOrSketchOrImportedGeometry", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SolidOrSketchOrImportedGeometry", + "description": "Data for a solid or an imported geometry.", + "oneOf": [ + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "importedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Solid" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "solidSet" + ] + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sketchSet" + ] + } + } + } + ], + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "type": "number", - "format": "double" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 45, length = 10)\n |> tangentialArcToRelative([0, -10], %)\n |> line(end = [-10, 0])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)" - ] - }, - { - "name": "tau", - "summary": "Return the value of `tau`. The full circle constant (Ï„). Equal to 2Ï€.", - "description": "**DEPRECATED** use the constant TAU", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": true, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 10 * tau())\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "toDegrees", - "summary": "Converts a number from radians to degrees.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 70 * cos(toDegrees(pi() / 4)))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "toRadians", - "summary": "Converts a number from degrees to radians.", - "description": "", - "tags": [ - "math" - ], - "keywordArguments": false, - "args": [ - { - "name": "num", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "double", - "type": "number", - "format": "double" - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> angledLine(angle = 50, length = 70 * cos(toRadians(45)))\n |> yLine(endAbsolute = 0)\n |> close()\n\nexample = extrude(exampleSketch, length = 5)" - ] - }, - { - "name": "translate", - "summary": "Move a solid or a sketch.", - "description": "This is really useful for assembling parts together. You can create a part and then move it to the correct location.\n\nTranslate is really useful for sketches if you want to move a sketch and then rotate it using the `rotate` function to create a loft.", - "tags": [], - "keywordArguments": true, - "args": [ - { - "name": "objects", - "type": "SolidOrSketchOrImportedGeometry", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SolidOrSketchOrImportedGeometry", - "description": "Data for a solid or an imported geometry.", - "oneOf": [ - { - "description": "Data for an imported geometry.", + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", "type": "object", "required": [ "id", - "type", - "value" + "sourceRange" ], "properties": { - "type": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { "type": "string", "enum": [ - "importedGeometry" + "XY", + "XZ", + "YZ" ] }, - "id": { - "description": "The ID of the imported geometry.", + { + "description": "A custom plane.", "type": "string", - "format": "uuid" + "enum": [ + "Custom" + ] }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - } + ] }, - { - "type": [ - "object", - "array" + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" ], - "items": { - "$ref": "#/components/schemas/Solid" - }, + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", "required": [ - "type" + "__geoMeta", + "from", + "to", + "units" ], "properties": { - "type": { - "type": "string", - "enum": [ - "solidSet" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } ] } } }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Sketch" - }, + "TagIdentifier": { + "type": "object", "required": [ - "type" + "value" ], "properties": { - "type": { - "type": "string", - "enum": [ - "sketchSet" - ] + "value": { + "type": "string" } } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] } - ], + } + }, + "required": true, + "includeInSnippet": true, + "description": "The solid, sketch, or set of solids or sketches to move.", + "labelRequired": false + }, + { + "name": "x", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, "definitions": { "Solid": { "type": "object", @@ -301584,13 +306376,13 @@ } } }, - "required": true, + "required": false, "includeInSnippet": true, - "description": "The solid, sketch, or set of solids or sketches to move.", - "labelRequired": false + "description": "The amount to move the solid or sketch along the x axis. Defaults to 0 if not provided.", + "labelRequired": true }, { - "name": "x", + "name": "y", "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", @@ -303184,11 +307976,11 @@ }, "required": false, "includeInSnippet": true, - "description": "The amount to move the solid or sketch along the x axis. Defaults to 0 if not provided.", + "description": "The amount to move the solid or sketch along the y axis. Defaults to 0 if not provided.", "labelRequired": true }, { - "name": "y", + "name": "z", "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", @@ -304782,17 +309574,16 @@ }, "required": false, "includeInSnippet": true, - "description": "The amount to move the solid or sketch along the y axis. Defaults to 0 if not provided.", + "description": "The amount to move the solid or sketch along the z axis. Defaults to 0 if not provided.", "labelRequired": true }, { - "name": "z", - "type": "number", + "name": "global", + "type": "bool", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_double", - "type": "number", - "format": "double", + "title": "Nullable_Boolean", + "type": "boolean", "nullable": true, "definitions": { "Solid": { @@ -305372,14 +310163,412 @@ } }, { - "description": "a complete arc", + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", "type": "object", "required": [ "__geoMeta", - "ccw", - "center", "from", - "radius", "to", "type", "units" @@ -305388,28 +310577,9 @@ "type": { "type": "string", "enum": [ - "Circle" + "Base" ] }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, "from": { "description": "The from point.", "type": "array", @@ -305453,14 +310623,14 @@ } }, { - "description": "A base path.", + "description": "A circular arc, not necessarily tangential to the current point.", "type": "object", "required": [ "__geoMeta", + "ccw", + "center", "from", - "p1", - "p2", - "p3", + "radius", "to", "type", "units" @@ -305469,11 +310639,11 @@ "type": { "type": "string", "enum": [ - "CircleThreePoint" + "Arc" ] }, - "p1": { - "description": "Point 1 of the circle", + "center": { + "description": "Center of the circle that this arc is drawn on.", "type": "array", "items": { "type": "number", @@ -305482,25 +310652,14 @@ "maxItems": 2, "minItems": 2 }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" }, "from": { "description": "The from point.", @@ -305543,1679 +310702,2270 @@ ] } } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } }, { - "description": "A base path.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", "type", - "units" + "units", + "value", + "xAxis", + "yAxis", + "zAxis" ], "properties": { "type": { "type": "string", "enum": [ - "ArcThreePoint" + "plane" ] }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "value": { + "$ref": "#/components/schemas/PlaneType" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] }, "units": { "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] }, - "tag": { - "description": "The tag of the path.", + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/ArtifactId" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" } ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] }, { - "description": "A path that is horizontal.", + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" + "edgeId", + "id", + "radius", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "Horizontal" + "fillet" ] }, - "x": { - "description": "The x coordinate.", + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } + } + }, + "required": false, + "description": "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move.", + "labelRequired": true + } + ], + "returnValue": { + "name": "", + "type": "SolidOrSketchOrImportedGeometry", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "SolidOrSketchOrImportedGeometry", + "description": "Data for a solid or an imported geometry.", + "oneOf": [ + { + "description": "Data for an imported geometry.", + "type": "object", + "required": [ + "id", + "type", + "value" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "importedGeometry" + ] + }, + "id": { + "description": "The ID of the imported geometry.", + "type": "string", + "format": "uuid" + }, + "value": { + "description": "The original file paths.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Solid" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "solidSet" + ] + } + } + }, + { + "type": [ + "object", + "array" + ], + "items": { + "$ref": "#/components/schemas/Sketch" + }, + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "sketchSet" + ] + } + } + } + ], + "definitions": { + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true + "format": "double" }, - "y": { - "description": "The y coordinate.", + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { "type": "number", "format": "double" }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "radius": { + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "length": { + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] - } - } - }, - "required": false, - "includeInSnippet": true, - "description": "The amount to move the solid or sketch along the z axis. Defaults to 0 if not provided.", - "labelRequired": true - }, - { - "name": "global", - "type": "bool", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_Boolean", - "type": "boolean", - "nullable": true, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + ] + } + } + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } + } + } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true } } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } } } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { + ] + } + } + }, + "required": true, + "includeInSnippet": true, + "labelRequired": true + }, + "unpublished": false, + "deprecated": false, + "examples": [ + "// Move a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> translate(x = 1.0, y = 1.0, z = 2.5)", + "// Move an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\n// Circle so you actually see the move.\nstartSketchOn(XY)\n |> circle(center = [-10, -10], radius = 10)\n |> extrude(length = 10)\n\ncube\n |> translate(x = 10.0, y = 10.0, z = 2.5)", + "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Move the sweeps.\ntranslate(\n parts,\n x = 1.0,\n y = 1.0,\n z = 2.5,\n)", + "// Move a sketch.\n\n\nfn square(length) {\n l = length / 2\n p0 = [-l, -l]\n p1 = [-l, l]\n p2 = [l, l]\n p3 = [l, -l]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> close()\n}\n\nsquare(10)\n |> translate(x = 5, y = 5)\n |> extrude(length = 10)", + "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfileAt([-10, 10], sketch001)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" + ] + }, + { + "name": "union", + "summary": "Union two or more solids into a single solid.", + "description": "", + "tags": [], + "keywordArguments": true, + "args": [ + { + "name": "solids", + "type": "[Solid]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Array_of_Solid", + "type": "array", + "items": { + "$ref": "#/components/schemas/Solid" + }, + "definitions": { + "Solid": { "type": "object", "required": [ "artifactId", + "height", "id", - "on", - "originalId", - "paths", - "start", - "units" + "sketch", + "units", + "value" ], "properties": { "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "description": "The id of the solid.", "type": "string", "format": "uuid" }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", "allOf": [ { - "$ref": "#/components/schemas/BasePath" + "$ref": "#/components/schemas/ArtifactId" } ] }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" } }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "sketch": { + "description": "The sketch.", "allOf": [ { - "$ref": "#/components/schemas/ArtifactId" + "$ref": "#/components/schemas/Sketch" } ] }, - "originalId": { + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", "type": "string", - "format": "uuid" + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } }, "units": { "$ref": "#/components/schemas/UnitLen" } } }, - "Path": { - "description": "A path.", + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "ExtrudeSurface": { + "description": "An extrude surface.", "oneOf": [ { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", + "description": "An extrude plane.", "type": "object", "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "CircleThreePoint" + "extrudePlane" ] }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -307223,194 +312973,44 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "uuid" }, - "__geoMeta": { - "description": "Metadata.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/SourceRange" } ] } } }, { - "description": "An angled line to.", + "description": "An extruded arc.", "type": "object", "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" + "faceId", + "id", + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "AngledLineTo" + "extrudeArc" ] }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { + "faceId": { + "description": "The face id for the extrude plane.", "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "format": "uuid" }, "tag": { - "description": "The tag of the path.", + "description": "The tag.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" @@ -307418,2261 +313018,1453 @@ ], "nullable": true }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { + "id": { + "description": "The id of the geometry.", "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true + "format": "uuid" }, - "__geoMeta": { - "description": "Metadata.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, { + "description": "Geometry metadata.", "type": "object", "required": [ - "artifactId", + "faceId", "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "plane" + "chamfer" ] }, - "id": { - "description": "The id of the plane.", + "faceId": { + "description": "The id for the chamfer surface.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", + "tag": { + "description": "The tag.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "zAxis": { - "description": "The z-axis (normal).", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } }, { - "description": "A face.", + "description": "Geometry metadata.", "type": "object", "required": [ - "artifactId", + "faceId", "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" + "sourceRange", + "type" ], "properties": { "type": { "type": "string", "enum": [ - "face" + "fillet" ] }, - "id": { - "description": "The id of the face.", + "faceId": { + "description": "The id for the fillet surface.", "type": "string", "format": "uuid" }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", + "tag": { + "description": "The tag.", "allOf": [ { - "$ref": "#/components/schemas/Point3d" + "$ref": "#/components/schemas/TagDeclarator" } - ] + ], + "nullable": true }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" }, - "solid": { - "description": "The solid the face is on.", + "sourceRange": { + "description": "The source range.", "allOf": [ { - "$ref": "#/components/schemas/Solid" + "$ref": "#/components/schemas/SourceRange" } ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" } } } ] }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { + "TagDeclarator": { "type": "object", "required": [ - "x", - "y", - "z" + "value" ], "properties": { - "x": { - "type": "number", - "format": "double" + "value": { + "type": "string" }, - "y": { - "type": "number", - "format": "double" + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true }, - "z": { - "type": "number", - "format": "double" + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 } } }, - "BasePath": { - "description": "A base path.", + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "Sketch": { "type": "object", "required": [ - "__geoMeta", - "from", - "to", + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", "units" ], "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" }, - "to": { - "description": "The to point.", + "paths": { + "description": "The paths in the sketch.", "type": "array", "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 + "$ref": "#/components/schemas/Path" + } }, - "units": { - "$ref": "#/components/schemas/UnitLen" + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] }, - "tag": { - "description": "The tag of the path.", + "start": { + "description": "The starting path.", "allOf": [ { - "$ref": "#/components/schemas/TagDeclarator" + "$ref": "#/components/schemas/BasePath" } - ], - "nullable": true + ] }, - "__geoMeta": { - "description": "Metadata.", + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", "allOf": [ { - "$ref": "#/components/schemas/GeoMeta" + "$ref": "#/components/schemas/ArtifactId" } ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" } } }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", + "Path": { + "description": "A path.", "oneOf": [ { - "description": "A fillet.", + "description": "A path that goes to a point.", "type": "object", "required": [ - "edgeId", - "id", - "radius", - "type" + "__geoMeta", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "fillet" + "ToPoint" ] }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "radius": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } }, { - "description": "A chamfer.", + "description": "A arc that is tangential to the last path segment that goes to a point", "type": "object", "required": [ - "edgeId", - "id", - "length", - "type" + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" ], "properties": { "type": { "type": "string", "enum": [ - "chamfer" + "TangentialArcTo" ] }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "length": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, "tag": { + "description": "The tag of the path.", "allOf": [ { "$ref": "#/components/schemas/TagDeclarator" } ], "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - } - ] - } - } - }, - "required": false, - "description": "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move.", - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "SolidOrSketchOrImportedGeometry", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "SolidOrSketchOrImportedGeometry", - "description": "Data for a solid or an imported geometry.", - "oneOf": [ - { - "description": "Data for an imported geometry.", - "type": "object", - "required": [ - "id", - "type", - "value" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "importedGeometry" - ] - }, - "id": { - "description": "The ID of the imported geometry.", - "type": "string", - "format": "uuid" - }, - "value": { - "description": "The original file paths.", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Solid" - }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "solidSet" - ] - } - } - }, - { - "type": [ - "object", - "array" - ], - "items": { - "$ref": "#/components/schemas/Sketch" - }, - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "sketchSet" - ] - } - } - } - ], - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "the arc's radius", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p2": { + "description": "Point 2 of the arc (interior kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "p3": { + "description": "Point 3 of the arc (end kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "x": { + "description": "The x coordinate.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { + "description": "The y coordinate.", "type": "number", - "format": "double" + "format": "double", + "nullable": true }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "radius": { + "description": "Radius of the circle that this arc is drawn on.", "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } } } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } } } + ] + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } } - ] - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } - ] - } - } - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } } } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } + ] + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] } - } - ] - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { + ] + }, + "Point3d": { + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { + "y": { "type": "number", "format": "double" }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" + "z": { + "type": "number", + "format": "double" + } } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { "type": "number", "format": "double" }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] } } - ] + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "type": "number", + "format": "double" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + } } - } + }, + "required": true, + "includeInSnippet": true, + "description": "The solids to union.", + "labelRequired": false }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "// Move a pipe.\n\n// Create a path for the sweep.\nsweepPath = startSketchOn(XZ)\n |> startProfileAt([0.05, 0.05], %)\n |> line(end = [0, 7])\n |> tangentialArc({ offset = 90, radius = 5 }, %)\n |> line(end = [-3, 0])\n |> tangentialArc({ offset = -90, radius = 5 }, %)\n |> line(end = [0, 7])\n\n// Create a hole for the pipe.\npipeHole = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 1.5)\n\nsweepSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 2)\n |> hole(pipeHole, %)\n |> sweep(path = sweepPath)\n |> translate(x = 1.0, y = 1.0, z = 2.5)", - "// Move an imported model.\n\n\nimport \"tests/inputs/cube.sldprt\" as cube\n\n// Circle so you actually see the move.\nstartSketchOn(XY)\n |> circle(center = [-10, -10], radius = 10)\n |> extrude(length = 10)\n\ncube\n |> translate(x = 10.0, y = 10.0, z = 2.5)", - "// Sweep two sketches along the same path.\n\n\nsketch001 = startSketchOn(XY)\nrectangleSketch = startProfileAt([-200, 23.86], sketch001)\n |> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)\n |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)\n |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n\ncircleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)\n\nsketch002 = startSketchOn(YZ)\nsweepPath = startProfileAt([0, 0], sketch002)\n |> yLine(length = 231.81)\n |> tangentialArc({ radius = 80, offset = -90 }, %)\n |> xLine(length = 384.93)\n\nparts = sweep([rectangleSketch, circleSketch], path = sweepPath)\n\n// Move the sweeps.\ntranslate(\n parts,\n x = 1.0,\n y = 1.0,\n z = 2.5,\n)", - "// Move a sketch.\n\n\nfn square(length) {\n l = length / 2\n p0 = [-l, -l]\n p1 = [-l, l]\n p2 = [l, l]\n p3 = [l, -l]\n\n return startSketchOn(XY)\n |> startProfileAt(p0, %)\n |> line(endAbsolute = p1)\n |> line(endAbsolute = p2)\n |> line(endAbsolute = p3)\n |> close()\n}\n\nsquare(10)\n |> translate(x = 5, y = 5)\n |> extrude(length = 10)", - "// Translate and rotate a sketch to create a loft.\nsketch001 = startSketchOn(XY)\n\nfn square() {\n return startProfileAt([-10, 10], sketch001)\n |> xLine(length = 20)\n |> yLine(length = -20)\n |> xLine(length = -20)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\n}\n\nprofile001 = square()\n\nprofile002 = square()\n |> translate(z = 20)\n |> rotate(axis = [0, 0, 1.0], angle = 45)\n\nloft([profile001, profile002])" - ] - }, - { - "name": "union", - "summary": "Union two or more solids into a single solid.", - "description": "", - "tags": [], - "keywordArguments": true, - "args": [ { - "name": "solids", - "type": "[Solid]", + "name": "tolerance", + "type": "number", "schema": { "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_of_Solid", - "type": "array", - "items": { - "$ref": "#/components/schemas/Solid" - }, + "title": "Nullable_double", + "type": "number", + "format": "double", + "nullable": true, "definitions": { "Solid": { "type": "object", @@ -311257,10 +316049,9 @@ } } }, - "required": true, - "includeInSnippet": true, - "description": "The solids to union.", - "labelRequired": false + "required": false, + "description": "The tolerance to use for the union operation.", + "labelRequired": true } ], "returnValue": { @@ -312862,11 +317653,11 @@ "labelRequired": true }, "unpublished": false, - "deprecated": true, + "deprecated": false, "examples": [ - "// Union two cubes using the stdlib functions.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = cube([20, 10])\n\nunionedPart = union([part001, part002])", - "// Union two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = cube([20, 10])\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", - "// Union two cubes using the more programmer-friendly operator.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - 10, center[1] - 10], %)\n |> line(endAbsolute = [center[0] + 10, center[1] - 10])\n |> line(endAbsolute = [center[0] + 10, center[1] + 10])\n |> line(endAbsolute = [center[0] - 10, center[1] + 10])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0])\npart002 = cube([20, 10])\n\n// This is the equivalent of: union([part001, part002])\n// Programmers will understand `|` as a union operation, but mechanical engineers\n// will understand `+`, we made both work.\nunionedPart = part001 | part002" + "// Union two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\nunionedPart = union([part001, part002])", + "// Union two cubes using operators.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", + "// Union two cubes using the more programmer-friendly operator.\n// NOTE: This will not work when using codemods through the UI.\n// Codemods will generate the stdlib function call instead.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfileAt([center[0] - size, center[1] - size], %)\n |> line(endAbsolute = [center[0] + size, center[1] - size])\n |> line(endAbsolute = [center[0] + size, center[1] + size])\n |> line(endAbsolute = [center[0] - size, center[1] + size])\n |> close()\n |> extrude(length = 10)\n}\n\npart001 = cube([0, 0], 10)\npart002 = cube([7, 3], 5)\n |> translate(z = 1)\n\n // This is the equivalent of: union([part001, part002])\n // Programmers will understand `|` as a union operation, but mechanical engineers\n// will understand `+`, we made both work.\nunionedPart = part001 | part002" ] }, { diff --git a/docs/kcl/subtract.md b/docs/kcl/subtract.md index d4e2c33f145..e3f7049568a 100644 --- a/docs/kcl/subtract.md +++ b/docs/kcl/subtract.md @@ -4,8 +4,6 @@ excerpt: "Subtract removes tool solids from base solids, leaving the remaining m layout: manual --- -**WARNING:** This function is deprecated. - Subtract removes tool solids from base solids, leaving the remaining material. Performs a boolean subtraction operation, removing the volume of one or more tool solids from one or more base solids. The result is a new solid representing the material that remains after all tool solids have been cut away. This function is essential for machining simulations, cavity creation, and complex multi-body part modeling. @@ -14,6 +12,7 @@ Performs a boolean subtraction operation, removing the volume of one or more too subtract( solids: [Solid], tools: [Solid], + tolerance?: number, ): [Solid] ``` @@ -24,6 +23,7 @@ subtract( |----------|------|-------------|----------| | `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to use as the base to subtract from. | Yes | | `tools` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to subtract. | Yes | +| `tolerance` | [`number`](/docs/kcl/types/number) | The tolerance to use for the subtraction operation. | No | ### Returns @@ -36,25 +36,24 @@ subtract( // Subtract a cylinder from a cube using the stdlib functions. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = startSketchOn(XY) - |> circle(center = [0, 0], radius = 2) - |> extrude(length = 10) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) subtractedPart = subtract([part001], tools = [part002]) ``` -![Rendered example of subtract 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEV5ElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX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A+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMBnT179tb77rvvVq666qqrrvq/BD3oQQ/iqquuuuqqq6666qqrrrrqqquuuuqqq676P4nKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwGshrjUTdgcigAAAABJRU5ErkJggg==) +![Rendered example of subtract 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADtaklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq67iHd/xHT/rmmuueTBXXXXVVVf9j/Nbv/Vb3/MP//APv81VV1111VVXXfVvgR70oAdx1VVXXXXVVf9fvdiLvdhrf/iHf/h3XXPNNQ/mqquuuuqq/7F+67d+67u//uu//n246qqrrrrqqqv+tdCDHvQgrrrqqquuuur/q2/6pm96+jXXXPPgP//zP+fP//zPueqqq6666j+Xbf61PuRDPgSAr//6r3+f3/qt3/purrrqqquuuuqqfw0qV1111VVXXfX/1Od+7uf+1jXXXPPgpz71qfzoj/4oV71gkrjqfzbbXPV/i22uuuKHf/iHeed3fmfe8R3f8bP+4R/+4bfvu+++W7nqqquuuuqqq15UBFddddVVV131/9DrvM7rvPeLvdiLvTbAr/3ar/HfSRKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISV/3PJwlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJHHVv54kJCEJSUhCEpKQhCQkIQlJSEISkpCEJP6v+Iu/+Av+/M//nGuuuebBH/7hH/5dXHXVVVddddVV/xqU48ePc9VVV1111VX/n7zYi73Ya3/SJ33STwF88zd/M0972tN4bpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCSuuur/A0lIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSuOoKSUhCEpKQhCQkIQlJSEISkpCEJCQhif9J7rrrLl78xV+cW2655cEA//AP//A7XHXVVVddddVVLwqCq6666qqrrvp/5p3e6Z0+C+Av/uIvePrTn44kJCEJSUjiqquu+t9NEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/28kIQlJSEISkpCEJCQhCUlIQhKS+M9w8eJFfuRHfgSA13md13nvF3uxF3ttrrrqqquuuuqqFwXBVVddddVVV/0/8rmf+7m/9WIv9mKv/bSnPY0f/dEf5ar/+SQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXPV/nyQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/8skIQlJSEISkpCEJCQhCUlIQhIviqc+9an8+Z//Oddcc82DP/zDP/y7uOqqq6666qqrXhQEV1111VVXXfX/xIu92Iu99ou92Iu9NsCv/dqv8X+BJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQk/jeRhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpDEVf9xJCEJSUhCEpKQhCQkIQlJSEISkpCEJCTxf4kkJCEJSUhCEpKQhCQk8Wu/9mtcvHiRa6655sHv+I7v+FlcddVVV1111VX/Esrx48e56qqrrrrqqv/rrrnmmgd/xVd8xV8BfMu3fAtPe9rT+I8iCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkrrrqv5okJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCElc9f5KQhCQkIQlJSEISkpCEJCQhCUlIQhL/G61WK+666y5e/uVfnmuuuebBt95669+cPXv2Vq666qqrrrrqqheEylVXXXXVVVf9P/DhH/7h3wXwtKc9jac//elI4qqrrvqv9YEf+IFc9X+Hbf67XXPNNQ/+8A//8O/6kA/5kIdw1VVXXXXVVVe9IFSuuuqqq6666v+4z/3cz/2tF3uxF3vtixcv8q3f+q1cddVV//U+8AM/kIc+9KFcddV/tLNnz956zTXXPPi+++67lauuuuqqq6666vmhctVVV1111VX/h73Yi73Ya7/Yi73YawP82I/9GFc9f5K46v8u2/xP8bSnPY3d3V3+p5DEVS+cbf4nsc39HvvYx/JiL/Zir81VV1111VVXXfXCULnqqquuuuqq/6OuueaaB3/u537ubwF867d+K0972tP4n0ISV131X0US/1Ps7u5y8eJF/jUk8Z9JEle9aGzzH8k2/1a2WSwWANx33323ctVVV1111VVXvSBUrrrqqquuuur/qA//8A//LoCnPe1pPO1pT+NFIYmrrrrqP97FixcBmM/n/GvZRhL/WWwjiav+ZZJ4INv8e0jifrb515DEVVddddVVV131IqFy1VVXXXXVVf8Hfe7nfu5vvdiLvdhrX7x4kW/7tm9DElddddV/n4sXLwIwn8/5t7ANgCSu+p9DEvezzb+HJABs86KYz+cA3Hfffbdy1VVXXXXVVVe9MFSuuuqqq6666v+YF3uxF3vtF3uxF3ttgB//8R/nqv/5JPF/mW3+v9vd3QVgsVjw72EbSfxHs40krvq3k8T9bPNvJYn72eYFWSwWAJw9e/ZWrrrqqquuuuqqF4bKVVddddVVV/0fcs011zz4cz/3c38L4Nu+7dt42tOexv9Fkrjqfw9J/F9hm3+LixcvAjCfz/n3so0krvqfSxL3s82/lSQAbPPc5vM5APfdd9+tXHXVVVddddVVLwyVq6666qqrrvo/5MM//MO/C+BpT3saT3va0/ivIImrrvr/QhL/Fru7uwDM53NsI4l/D9tI4v8qSfxnss1/FUk8kG3+tSRxP9tcddVVV1111VX/KlSuuuqqq6666v+Id3zHd/ysF3uxF3vtixcv8m3f9m08kCSuuuqq/36r1QoA20jiKpDEfzVJvDC2+c8iifvZ5l9LEgDz+RyA++6771auuuqqq6666qoXhspVV1111VVX/R/wYi/2Yq/9Tu/0Tp8N8OM//uNI4qqrrvqf4+LFi1y8eJETJ04wn89ZrVbYRhL/VraRxP9GkvifTBLPj23+I0nifrb511gsFgCcPXv2GVx11VVXXXXVVS8Mlauu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trGNbWzz/4VtbGMb29jGNraxjW1sc9VV/9FsYxvb2MY2trGNbWxjm/8vbGMb29jGNv8b2MY2trHN/xS2sY1tbPOf5ZZbbgHgH/7hH36bq6666qqrrnr+qFx11VVXXfV/xn333XcrwLFjx/ivYpsHksT/FLZ5bpL438I2z00S/1/Z5l9DElf9/2Kbq/5ltvnfzDb/U9nmv9qxY8cAuO+++27lqquuuuqqq54/KlddddVVV/2f8Q//8A+/A3DLLbfw38U2DySJ/0ls80CS+N/ENs+PJK56Trb5t5DEVf+9bHPVv59t/rezzf9ktrnqqquuuuqq/wWoXHXVVVdd9X/G2bNnbwU4duwYtpHEfzfbPJAk/iexzXOTxP82tnlBJHHVi842/5Ek8X+dba7672Ob/yts8z+Zbf4nefEXf3EAfuu3fuu7ueqqq6666qoXjMpVV1111VX/Z9x33323Ahw7dgwA2zyQJP672eZ+kvifyDbPTRL/W9nm+ZHEVf/5bHPVVf9etvm/xjb/09nmfxLbXHXVVVddddW/AcFVV1111VX/p/zDP/zDbwPccsstPDfb2MY2/xPYxja2sc3/ZLaxjW1s83+BbWxjG9vYxja2ueqqq/7r2cY2trGNbWxjm//tbGMb29jGNv9T2cY2tvmfwDa2sc1ze9CDHgTAP/zDP/wOV1111VVXXfWCUbnqqquuuur/pFtuuYV/DUn8TyOJq/5nksRVV131r2ebq/5nsc3/JLZ5UR07doyrrrrqqquuehFQueqqq6666v+U3/qt3/qeM2fOPPg1XuM1HsxVV1111VVXXfV/2j/8wz/89j/8wz/8NlddddVVV131glG56qqrrrrq/5Tf+q3f+m6A13md13kvrrrqqquuuuqq/9O+/uu//n3uu+++W7nqqquuuuqqFww96EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y+Ovq+IBbA2OwAAAABJRU5ErkJggg==) ```js // Subtract a cylinder from a cube using operators. @@ -62,25 +61,24 @@ subtractedPart = subtract([part001], tools = [part002]) // Codemods will generate the stdlib function call instead. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = startSketchOn(XY) - |> circle(center = [0, 0], radius = 2) - |> extrude(length = 10) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) // This is the equivalent of: subtract([part001], tools=[part002]) subtractedPart = part001 - part002 ``` -![Rendered example of subtract 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEV5ElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX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A+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMBnT179tb77rvvVq666qqrrvq/BD3oQQ/iqquuuuqqq6666qqrrrrqqquuuuqqq676P4nKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q/iHwGshrjUTdgcigAAAABJRU5ErkJggg==) +![Rendered example of subtract 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADtaklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq67iHd/xHT/rmmuueTBXXXXVVVf9j/Nbv/Vb3/MP//APv81VV1111VVXXfVvgR70oAdx1VVXXXXVVf9fvdiLvdhrf/iHf/h3XXPNNQ/mqquuuuqq/7F+67d+67u//uu//n246qqrrrrqqqv+tdCDHvQgrrrqqquuuur/q2/6pm96+jXXXPPgP//zP+fP//zPueqqq6666j+Xbf61PuRDPgSAr//6r3+f3/qt3/purrrqqquuuuqqfw0qV1111VVXXfX/1Od+7uf+1jXXXPPgpz71qfzoj/4oV71gkrjqfzbbXPV/i22uuuKHf/iHeed3fmfe8R3f8bP+4R/+4bfvu+++W7nqqquuuuqqq15UBFddddVVV131/9DrvM7rvPeLvdiLvTbAr/3ar/HfSRKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISV/3PJwlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJHHVv54kJCEJSUhCEpKQhCQkIQlJSEISkpCEJP6v+Iu/+Av+/M//nGuuuebBH/7hH/5dXHXVVVddddVV/xqU48ePc9VVV1111VX/n7zYi73Ya3/SJ33STwF88zd/M0972tN4bpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCSuuur/A0lIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSuOoKSUhCEpKQhCQkIQlJSEISkpCEJCQhif9J7rrrLl78xV+cW2655cEA//AP//A7XHXVVVddddVVLwqCq6666qqrrvp/5p3e6Z0+C+Av/uIvePrTn44kJCEJSUjiqquu+t9NEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/28kIQlJSEISkpCEJCQhCUlIQhKS+M9w8eJFfuRHfgSA13md13nvF3uxF3ttrrrqqquuuuqqFwXBVVddddVVV/0/8rmf+7m/9WIv9mKv/bSnPY0f/dEf5ar/+SQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXPV/nyQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/8skIQlJSEISkpCEJCQhCUlIQhIviqc+9an8+Z//Oddcc82DP/zDP/y7uOqqq6666qqrXhQEV1111VVXXfX/xIu92Iu99ou92Iu9NsCv/dqv8X+BJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQk/jeRhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpDEVf9xJCEJSUhCEpKQhCQkIQlJSEISkpCEJCTxf4kkJCEJSUhCEpKQhCQk8Wu/9mtcvHiRa6655sHv+I7v+FlcddVVV1111VX/Esrx48e56qqrrrrqqv/rrrnmmgd/xVd8xV8BfMu3fAtPe9rT+I8iCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkrrrqv5okJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCElc9f5KQhCQkIQlJSEISkpCEJCQhCUlIQhL/G61WK+666y5e/uVfnmuuuebBt95669+cPXv2Vq666qqrrrrqqheEylVXXXXVVVf9P/DhH/7h3wXwtKc9jac//elI4qqrrvqv9YEf+IFc9X+Hbf67XXPNNQ/+8A//8O/6kA/5kIdw1VVXXXXVVVe9IFSuuuqqq6666v+4z/3cz/2tF3uxF3vtixcv8q3f+q1cddVV//U+8AM/kIc+9KFcddV/tLNnz956zTXXPPi+++67lauuuuqqq6666vmhctVVV1111VX/h73Yi73Ya7/Yi73YawP82I/9GFc9f5K46v8u2/xP8bSnPY3d3V3+p5DEVS+cbf4nsc39HvvYx/JiL/Zir81VV1111VVXXfXCULnqqquuuuqq/6OuueaaB3/u537ubwF867d+K0972tP4n0ISV131X0US/1Ps7u5y8eJF/jUk8Z9JEle9aGzzH8k2/1a2WSwWANx33323ctVVV1111VVXvSBUrrrqqquuuur/qA//8A//LoCnPe1pPO1pT+NFIYmrrrrqP97FixcBmM/n/GvZRhL/WWwjiav+ZZJ4INv8e0jifrb515DEVVddddVVV131IqFy1VVXXXXVVf8Hfe7nfu5vvdiLvdhrX7x4kW/7tm9DElddddV/n4sXLwIwn8/5t7ANgCSu+p9DEvezzb+HJABs86KYz+cA3Hfffbdy1VVXXXXVVVe9MFSuuuqqq6666v+YF3uxF3vtF3uxF3ttgB//8R/nqv/5JPF/mW3+v9vd3QVgsVjw72EbSfxHs40krvq3k8T9bPNvJYn72eYFWSwWAJw9e/ZWrrrqqquuuuqqF4bKVVddddVVV/0fcs011zz4cz/3c38L4Nu+7dt42tOexv9Fkrjqfw9J/F9hm3+LixcvAjCfz/n3so0krvqfSxL3s82/lSQAbPPc5vM5APfdd9+tXHXVVVddddVVLwyVq6666qqrrvo/5MM//MO/C+BpT3saT3va0/ivIImrrvr/QhL/Fru7uwDM53NsI4l/D9tI4v8qSfxnss1/FUk8kG3+tSRxP9tcddVVV1111VX/KlSuuuqqq6666v+Id3zHd/ysF3uxF3vtixcv8m3f9m08kCSuuuqq/36r1QoA20jiKpDEfzVJvDC2+c8iifvZ5l9LEgDz+RyA++6771auuuqqq6666qoXhspVV1111VVX/R/wYi/2Yq/9Tu/0Tp8N8OM//uNI4qqrrvqf4+LFi1y8eJETJ04wn89ZrVbYRhL/VraRxP9GkvifTBLPj23+I0nifrb511gsFgCcPXv2GVx11VVXXXXVVS8Mlauu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trGNbWzz/4VtbGMb29jGNraxjW1sc9VV/9FsYxvb2MY2trGNbWxjm/8vbGMb29jGNv8b2MY2trHN/xS2sY1tbPOf5ZZbbgHgH/7hH36bq6666qqrrnr+qFx11VVXXfV/xn333XcrwLFjx/ivYpsHksT/FLZ5bpL438I2z00S/1/Z5l9DElf9/2Kbq/5ltvnfzDb/U9nmv9qxY8cAuO+++27lqquuuuqqq54/KlddddVVV/2f8Q//8A+/A3DLLbfw38U2DySJ/0ls80CS+N/ENs+PJK56Trb5t5DEVf+9bHPVv59t/rezzf9ktrnqqquuuuqq/wWoXHXVVVdd9X/G2bNnbwU4duwYtpHEfzfbPJAk/iexzXOTxP82tnlBJHHVi842/5Ek8X+dba7672Ob/yts8z+Zbf4nefEXf3EAfuu3fuu7ueqqq6666qoXjMpVV1111VX/Z9x33323Ahw7dgwA2zyQJP672eZ+kvifyDbPTRL/W9nm+ZHEVf/5bHPVVf9etvm/xjb/09nmfxLbXHXVVVddddW/AcFVV1111VX/p/zDP/zDbwPccsstPDfb2MY2/xPYxja2sc3/ZLaxjW1s83+BbWxjG9vYxja2ueqqq/7r2cY2trGNbWxjm//tbGMb29jGNv9T2cY2tvmfwDa2sc1ze9CDHgTAP/zDP/wOV1111VVXXfWCUbnqqquuuur/pFtuuYV/DUn8TyOJq/5nksRVV131r2ebq/5nsc3/JLZ5UR07doyrrrrqqquuehFQueqqq6666v+U3/qt3/qeM2fOPPg1XuM1HsxVV1111VVXXfV/2j/8wz/89j/8wz/8NlddddVVV131glG56qqrrrrq/5Tf+q3f+m6A13md13kvrrrqqquuuuqq/9O+/uu//n3uu+++W7nqqquuuuqqFww96EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y+Ovq+IBbA2OwAAAABJRU5ErkJggg==) diff --git a/docs/kcl/union.md b/docs/kcl/union.md index c01ada45b6d..b192d282f6d 100644 --- a/docs/kcl/union.md +++ b/docs/kcl/union.md @@ -4,14 +4,15 @@ excerpt: "Union two or more solids into a single solid." layout: manual --- -**WARNING:** This function is deprecated. - Union two or more solids into a single solid. ```js -union(solids: [Solid]): [Solid] +union( + solids: [Solid], + tolerance?: number, +): [Solid] ``` @@ -20,6 +21,7 @@ union(solids: [Solid]): [Solid] | Name | Type | Description | Required | |----------|------|-------------|----------| | `solids` | [`[Solid]`](/docs/kcl/types/Solid) | The solids to union. | Yes | +| `tolerance` | [`number`](/docs/kcl/types/number) | The tolerance to use for the union operation. | No | ### Returns @@ -32,23 +34,24 @@ union(solids: [Solid]): [Solid] // Union two cubes using the stdlib functions. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = cube([20, 10]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) unionedPart = union([part001, part002]) ``` -![Rendered example of union 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD3iElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquu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ddVVV1111VVXXXXVVf8pqFx11VVXXfV83XfffbcCHDt2jP8MtrmfJP6z2eZ+kvivZJsHksR/F9s8N0n8T2Ob50cS/1fZ5l9DElddddVVV1111VVXXXXVv4jKVVddddVVz9c//MM//A7Azs4O/9lscz9J/GezzQNJ4r+SbR5IEv+dbPNAkvifyjbPjyT+v7HNv4Ukrrrqqquuuuqqq6666v8RKlddddVVVz1fZ8+evRXg2LFj2AZAEv/ZbHM/SfxXsM39JPFfzTb3k8R/N9s8N0n8T2ab50cSVz0n2/xnk8R/F9tcddVVV1111VVXXXXVAxBcddVVV131fN1333233nfffbceO3aMW265BQDb2MY2/xVsYxvb/FexjW1s89/BNraxjW3+p7CNbWxjm/8tbGMb29jGNraxzVX/eWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sc1VV1111VVXXXXVVVc9F4KrrrrqqqteoLNnz97KC2Ab29jmv4JtbGOb/yq2sY1tbPPfwTa2sY1t/qewjW1sYxvb/G9jG9vYxja2sY1trrrqqquuuuqqq6666qr/M6hcddVVV131Av393//9b7/Yi73Ya7/4i784/1NJ4r+DJP4nkMRV//UkcdVVV1111VVXXXXVVVf9r0DlqquuuuqqF+gf/uEffue+++679SVe4iUe/BIv8RJcddVVV/1f8A//8A+/zVVXXXXVVVddddVV/1+gBz3oQVx11VVXXfWCvdiLvdhrv9M7vdNncdVVV131f8RnfuZnvg5XXXXVVVddddVVV/1/gR70oAdx1VVXXXXVVVddddVVV1111VVXXXXVVVf9n0Tlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V/GPS3YW338jIp4AAAAASUVORK5CYII=) +![Rendered example of union 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADzVElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX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BsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCe6ezZs7fed999t3LVVVddddVV/z3Qgx70IK666qqrrrrqqquuuuqqq6666qqrrrrqqv+TqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X8U/Arqr2cdD02ooAAAAAElFTkSuQmCC) ```js // Union two cubes using operators. @@ -56,24 +59,25 @@ unionedPart = union([part001, part002]) // Codemods will generate the stdlib function call instead. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = cube([20, 10]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) // This is the equivalent of: union([part001, part002]) unionedPart = part001 + part002 ``` -![Rendered example of union 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD3iElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquu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ddVVV1111VVXXXXVVf8pqFx11VVXXfV83XfffbcCHDt2jP8MtrmfJP6z2eZ+kvivZJsHksR/F9s8N0n8T2Ob50cS/1fZ5l9DElddddVVV1111VVXXXXVv4jKVVddddVVz9c//MM//A7Azs4O/9lscz9J/GezzQNJ4r+SbR5IEv+dbPNAkvifyjbPjyT+v7HNv4Ukrrrqqquuuuqqq6666v8RKlddddVVVz1fZ8+evRXg2LFj2AZAEv/ZbHM/SfxXsM39JPFfzTb3k8R/N9s8N0n8T2ab50cSVz0n2/xnk8R/F9tcddVVV1111VVXXXXVAxBcddVVV131fN1333233nfffbceO3aMW265BQDb2MY2/xVsYxvb/FexjW1s89/BNraxjW3+p7CNbWxjm/8tbGMb29jGNraxzVX/eWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sc1VV1111VVXXXXVVVc9F4KrrrrqqqteoLNnz97KC2Ab29jmv4JtbGOb/yq2sY1tbPPfwTa2sY1t/qewjW1sYxvb/G9jG9vYxja2sY1trrrqqquuuuqqq6666qr/M6hcddVVV131Av393//9b7/Yi73Ya7/4i784/1NJ4r+DJP4nkMRV//UkcdVVV1111VVXXXXVVVf9r0DlqquuuuqqF+gf/uEffue+++679SVe4iUe/BIv8RJcddVVV/1f8A//8A+/zVVXXXXVVVddddVV/1+gBz3oQVx11VVXXfWCvdiLvdhrv9M7vdNncdVVV131f8RnfuZnvg5XXXXVVVddddVVV/1/gR70oAdx1VVXXXXVVVddddVVV1111VVXXXXVVVf9n0Tlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V/GPS3YW338jIp4AAAAASUVORK5CYII=) +![Rendered example of union 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADzVElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX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BsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCe6ezZs7fed999t3LVVVddddVV/z3Qgx70IK666qqrrrrqqquuuuqqq6666qqrrrrqqv+TqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X8U/Arqr2cdD02ooAAAAAElFTkSuQmCC) ```js // Union two cubes using the more programmer-friendly operator. @@ -81,25 +85,26 @@ unionedPart = part001 + part002 // Codemods will generate the stdlib function call instead. -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() |> extrude(length = 10) } -part001 = cube([0, 0]) -part002 = cube([20, 10]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) -// This is the equivalent of: union([part001, part002]) -// Programmers will understand `|` as a union operation, but mechanical engineers + // This is the equivalent of: union([part001, part002]) + // Programmers will understand `|` as a union operation, but mechanical engineers // will understand `+`, we made both work. unionedPart = part001 | part002 ``` -![Rendered example of union 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD3iElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqq/1d+4id+wlx11VX/6X7rt37ru//hH/7hd37rt37ru7nqqquuuuqq/z5Urrrqqquuuuqqq676f+MnfuInDPCnf/qnXPU/n22u+rezzX+n13md13nvF3uxF3vt++6779Z/+Id/+G2uuuqqq6666r8Hlauuuuqqq6666qqr/t/5oR/6If41bPP/hW3+N7LN/2S2+Z/GNv+ZLly4wJu+6Zs++MM//MO/60M+5EMewlVXXXXVVVf99yC46qqrrrrqqquuuuqqf4EkJCEJSUhCEpKQhCQkIQlJSEISkpCEJP63kIQkJCEJSUhCEpKQhCQkIYn/KSQhCUlIQhKSkIQkJCGJ/y6SkIQkJCEJSUhCEpL4ryYJSUhCEpKQhCQk8e/1x3/8xzz5yU/mmmuuefCHf/iHfxdXXXXVVVdd9d+D4Kqrrrrqqquuuuqqq/4LSEISkpCEJCQhCUlIQhKSkIQkJPE/nSQkIQlJSEISkpCEJCQhif8JJCEJSUhCEpKQhCQk8d9FEpKQhCQkIQlJSEIS/5UkIQlJSEISkpCEJP4lFy5c4Pu+7/sAeJ3XeZ33fsd3fMfP4qqrrrrqqqv+6xFcddVVV1111VVXXXXV/2CSkIQkJCEJSUhCEpKQhCQkIQlJ/E8kCUlIQhKSkIQkJCEJSUjiv5MkJCEJSUhCEpKQhCQk8d9BEpKQhCQkIQlJSOK/kiQkIQlJSEISkpAEwIULF/j+7/9+AF7ndV7nvV/sxV7stbnqqquuuuqq/1oEV1111VVXXXXVVVf9vyMJSUhCEpKQhCQkIQlJSEIS/xtJQhKSkIQkJCEJSUhCEpKQxP80kpCEJCQhCUlIQhKSkMR/J0lIQhKSkIQkJCEJSfxXk4QkJCEJSUhCEpL4ryQJSfzJn/wJv/iLv8g111zz4A//8A//rmuuuebBXHXVVVddddV/HYKrrrrqqquuuuqqq676F0hCEpKQhCQkIQlJSEISkpCEJCQhCUn8byAJSUhCEpKQhCQkIQlJSEIS/1NIQhKSkIQkJCEJSUhCEv9dJCEJSUhCEpKQhCT+q0lCEpKQhCQkIQlJ/Gf5kz/5E5785CdzzTXXPPhzPudzfourrrrqqquu+q9DcNVVV1111VVXXXXVVf/JJCEJSUhCEpKQhCQkIQlJSEISkvifTBKSkIQkJCEJSUhCEpKQxP8EkpCEJCQhCUlIQhKS+O8gCUlIQhKSkIQkJCGJ/0qSkIQkJCEJSUhCEv9WFy5c4Pu///u5cOEC11xzzYPf8R3f8bO46qqrrrrqqv8aBFddddVVV1111VVXXfU/lCQkIQlJSEISkpCEJCQhCUlIQhL/00hCEpKQhCQkIQlJSEISkvjvJAlJSEISkpCEJCQhif8OkpCEJCQhCUlIQhL/lSQhCUlIQhKSkMS/5MKFC3zN13wNAO/0Tu/02a/zOq/z3lx11VVXXXXVfz6Cq6666qqrrrrqqqv+35GEJCQhCUlIQhKSkIQkJCGJ/20kIQlJSEISkpCEJCQhCUlI4n8SSUhCEpKQhCQkIQlJSOK/iyQkIQlJSEISkpCEJP6rSUISkpCEJCQhCUn8V5GEJCQhCUlIQhKSALhw4QLf//3fD8A7vdM7ffY111zzYK666qqrrrrqPxfBVVddddVVV1111VVX/QskIQlJSEISkpCEJCQhCUlIQhKSkMT/BpKQhCQkIQlJSEISkpCEJP6nkIQkJCEJSUhCEpKQxH8XSUhCEpKQhCQkIQlJ/FeShCQkIQlJSEISkvivIglJ/Omf/il/8id/wpkzZx70OZ/zOb/FVVddddVVV/3nIrjqqquuuuqqq6666qr/RJKQhCQkIQlJSEISkpCEJCQhCUn8TyUJSUhCEpKQhCQkIQlJSOK/myQkIQlJSEISkpCEJCTx30ESkpCEJCQhCUlI4r+SJCQhCUlIQhKSkMR/hl/6pV/iwoULXHPNNQ/+8A//8O/iqquuuuqqq/7zEFx11VVXXXXVVVddddX/QJKQhCQkIQlJSEISkpCEJCQhif9pJCEJSUhCEpKQhCQkIQlJ/HeShCQkIQlJSEISkpDEfzVJSEISkpCEJCQhif9KkpCEJCQhCUlI4t/qwoULfO3Xfi0Ar/M6r/Pe7/iO7/hZXHXVVVddddV/DoKrrrrqqquuuuqqq/7fkYQkJCEJSUhCEpKQhCQk8b+JJCQhCUlIQhKSkIQkJCEJSfxPIglJSEISkpCEJCQhif9OkpCEJCQhCUlIQhL/1SQhCUlIQhKSkIQk/qtIQhKSkIQkJCGJf8mFCxf4gR/4AQBe53Ve571f7MVe7LW56qqrrrrqqv94BFddddVVV1111VVXXfVCSEISkpCEJCQhCUlIQhKSkIQkJCGJ/+kkIQlJSEISkpCEJCQhCUlI4r+bJCQhCUlIQhKSkIQkJPHfQRKSkIQkJCEJSUhCEv+VJCEJSUhCEpKQhCT+K0hCEpKQhCQkIQlJAPzJn/wJv/RLv8Q111zz4A//8A//Lq666qqrrrrqPx7BVVddddVVV1111VVX/SeRhCQkIQlJSEISkpCEJCQhCUlI4n8qSUhCEpKQhCQkIQlJSOK/myQkIQlJSEISkpCEJP47SEISkpCEJCQhCUn8V5KEJCQhCUlIQhL/VSQhiT/90z/lKU95Ctdcc82DP/dzP/e3ueqqq6666qr/WARXXXXVVVddddVVV131P4wkJCEJSUhCEpKQhCQkIQlJSOJ/EklIQhKSkIQkJCEJSUjiv5MkJCEJSUhCEpKQhCT+q0lCEpKQhCQkIQlJ/FeRhCQkIQlJSEISkviPduHCBX7gB36ACxcu8GIv9mKv9Y7v+I6fxVVXXXXVVVf9xyG46qqrrrrqqquuuur/HUlIQhKSkIQk/jeThCQkIQlJSEISkpCEJCQhif8JJCEJSUhCEpKQhCQkIYn/LpKQhCQkIQlJSEISkvivJAlJSEISkpCEJCTxX0USkpCEJCQhCUn8W124cIEf+IEfAOB1Xud13vvFXuzFXpurrrrqqquu+o9BcNVVV1111VVXXXXVVc8kCUlIQhKSkIQkJCEJSUhCEpKQhCT+t5GEJCQhCUlIQhKSkIQkJPHfTRKSkIQkJCEJSUhCEpL47yAJSUhCEpKQhCQk8V9JEpKQhCQkIQlJ/FeRhCQkIQlJSEIS/5KnPOUp/NIv/RLXXHPNgz/8wz/8u6655poHc9VVV1111VX/fgRXXXXVVVddddVVV131H0ASkpCEJCQhCUlIQhKSkIQkJCGJ/w0kIQlJSEISkpCEJCQhif9ukpCEJCQhCUlIQhKS+K8mCUlIQhKSkIQkJPFfRRKSkIQkJCEJSUjiv4IkJCEJSUhCEpK43y//8i/zlKc8hWuuuebBn/M5n/NbXHXVVVddddW/H8FVV1111VVXXXXVVVf9N5KEJCQhCUlIQhKSkIQkJCEJSfxPJQlJSEISkpCEJCQhCUn8d5KEJCQhCUlIQhKS+K8mCUlIQhKSkIQkJPFfRRKSkIQkJCEJSfxXkIQkJPGDP/iDXLhwgWuuuebBH/7hH/5dXHXVVVddddW/D8FVV1111VVXXXXVVf/vSEISkpCEJP43kYQkJCEJSUhCEpKQhCQkIYn/aSQhCUlIQhKSkIQkJCGJ/w6SkIQkJCEJSUhCEpL4ryQJSUhCEpKQhCQk8V9BEpKQhCQkIQlJ/Ge4cOECX//1Xw/A67zO67z367zO67w3V1111VVXXfVvR3DVVVddddVVV1111VWAJCQhCUlIQhKSkIQkJCEJSUhCEpL4n04SkpCEJCQhCUlIQhKSkMT/JJKQhCQkIQlJSEISkvjvIAlJSEISkpCEJCTxX0kSkpCEJCQhCUn8V5CEJCQhCUlIQhL/HhcuXOAHf/AHAXind3qnz36xF3ux1+aqq6666qqr/m0Irrrqqquuuuqqq6666t9JEpKQhCQkIQlJSEISkpCEJCQhif+JJCEJSUhCEpKQhCQkIYn/KSQhCUlIQhKSkIQkJPFfTRKSkIQkJCEJSUjiv4okJCEJSUhCEpKQxH82SUhCEpKQhCQk8aL40z/9U375l3+ZM2fOPOjDP/zDv4urrrrqqquu+rchuOqqq6666qqrrrrqqv8mkpCEJCQhCUlIQhKSkIQkJPE/iSQkIQlJSEISkpCEJCTxP4EkJCEJSUhCEpKQhCT+K0lCEpKQhCQkIQlJ/FeRhCQkIQlJSEIS/9kkIQlJSEISkpDEA/3pn/4pT3nKU7jmmmse/OEf/uHfxVVXXXXVVVf96xFcddVVV1111VVXXfX/jiQkIQlJ/G8hCUlIQhKSkIQkJCEJSUhCEv8TSEISkpCEJCQhCUlIQhL/3SQhCUlIQhKSkIQk/itJQhKSkIQkJCGJ/yqSkIQkJCEJSUjiP5skJCGJixcv8kM/9EMAvM7rvM57v+M7vuNncdVVV1111VX/OgRXXXXVVVddddVVV/2/JwlJSEISkpCEJCQhCUlIQhKSkMT/dJKQhCQkIQlJSEISkpCEJP67SUISkpCEJCQhCUlI4r+TJCQhCUlIQhKSkMR/FUlIQhKSkIQkJCGJ/wqSkIQkJCEJSUjiP8OFCxf4oR/6IQBe53Ve571f7MVe7LW56qqrrrrqqhcdwVVXXXXVVVddddVVV/0bSUISkpCEJCQhCUlIQhKSkIQkJPE/kSQkIQlJSEISkpCEJCTx30kSkpCEJCQhCUlIQhL/XSQhCUlIQhKSkIQk/qtIQhKSkIQkJCGJ/wqSkIQkJCEJSUji3+NP//RP+eVf/mWuueaaB3/4h3/4d11zzTUP5qqrrrrqqqteNARXXXXVVVddddVVV131X0wSkpCEJCQhCUlIQhKSkIQk/ieRhCQkIQlJSEISkpCEJP67SEISkpCEJCQhCUlI4r+DJCQhCUlIQhKSkMR/BUlIQhKSkIQkJPFfQRKSkIQkJCGJF9Wf/dmf8ZSnPIVrrrnmwR/+4R/+3Vx11VVXXXXVi4bgqquuuuqqq6666qr/dyQhif8tJCEJSUhCEpKQhCQkIQlJ/E8hCUlIQhKSkIQkJCGJ/y6SkIQkJCEJSUhCEv8dJCEJSUhCEpKQxH8FSUhCEpKQhCQk8Z9NEpKQhCQkIQlJPNCFCxf4oR/6IS5cuMCLvdiLvdY7vuM7fhZXXXXVVVdd9S8juOqqq6666qqrrrrq/y1JSEISkpCEJCQhCUlIQhKSkIQk/ieThCQkIQlJSEISkpCEJCTx300SkpCEJCQhCUlIQhL/HSQhCUlIQhKSkIQk/qtJQhKSkIQkJCEJSfxnk4QkJCEJSUhCEv/ZJCEJSUji4sWLfOM3fiMA7/RO7/TZr/M6r/PeXHXVVVddddULR3DVVVddddVVV1111VX/SpKQhCQkIQlJSEISkpCEJCQhCUn8TyMJSUhCEpKQhCQkIQlJSOK/iyQkIQlJSEISkpCEJP6rSUISkpCEJCQhCUn8V5OEJCQhCUlIQhL/2SQhCUlIQhKSkMR/lgsXLvArv/IrALzjO77jZ11zzTUP5qqrrrrqqqteMIKrrrrqqquuuuqqq676LyIJSUhCEpKQhCQkIQlJSEIS/5NIQhKSkIQkJCEJSUjiv4skJCEJSUhCEpKQhCT+K0lCEpKQhCQkIYn/apKQhCQkIQlJSOI/myQkIQlJSEIS/xF+5Vd+hT/7sz/jmmuuefDnfM7n/BZXXXXVVVdd9YIRXHXVVVddddVVV1111f9QkpCEJCQhCUlIQhKSkIQk/ieQhCQkIQlJSEISkpCEJP47SEISkpCEJCQhCUn8V5GEJCQhCUlIQhKS+K8kCUlIQhKSkIQk/jNJQhKSkIQkJCGJf41f+ZVf4cKFC1xzzTUP/vAP//Dv4qqrrrrqqqueP4Krrrrqqquuuuqqq/7fkYQkJCEJSUhCEpKQhCQkIQlJSOJ/MklIQhKSkIQkJCEJSUhCEv/dJCEJSUhCEpKQhCQk8V9NEpKQhCQkIQlJSOK/iiQkIQlJSEISkvivJAlJSEISkpDEfzZJSEISkpCEJJ6fCxcu8I3f+I0AvM7rvM57v9M7vdNnc9VVV1111VXPi8pVV1111VVXPR8v9mIv9tpcddVVVz0XSfxr2eZ/Gkm8KGzz30USL4xt/itJ4oWxzX82SbwgtvmvIIkXxDb/WSTx/Fy8eJEf+qEf4l3e5V14ndd5nff++7//+9/+h3/4h9/mqquuuuqqq56NylVXXXXVVVc9l8/93M/9rTNnzjz4mmuueTBXXXXVVf9OkvjXsM3/FJJ4Udjmv5ok/iW2+a8iiRfENv/ZJPGC2Oa/giReENv8Z/nzP/9zTp48yRu90Rs96MM//MO/60M+5EMewlVXXXXVVVc9G5WrrrrqqquueoDP/dzP/a0Xe7EXe+2nPe1p/O7v/i5X/ceTxP9Htrnqv9/bv/3b8z+dJF5UtvmfQBL/Etv8V5PEC2Ob/wqSeGFs859JEi+Ibf4rSOL5sc1/hD//8z/nYQ97GA9/+MMf/OEf/uHf9fVf//Xvw1VXXXXVVVddQeWqq6666qqrnukd3/EdP+vFXuzFXhvgJ37iJ7h48SL/m0niqqteGNv8f/P2b//2AEjiX8M2/xNJ4kVlm/9OkviX2Oa/kiReGNv8V5DEC2Kb/0ySeEFs859NEs+Pbf41Lly4wA//8A/zoR/6obzO67zOe9933323/uiP/ujncNVVV1111VVAcNVVV1111VXAi73Yi732O73TO302wLd927dx8eJF/itIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhiauu+pdIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUn8XyIJSUhCEpKQhCQkIQlJSEISkvifRhKSkIQkJCEJSUhCEpL47yQJSUhCEpKQhCQk8V9NEpKQhCQkIQlJ/FeRhCQkIQlJSEIS/9kkIQlJSEISkvivIAlJSEISkpCEJF6Qixcv8sM//MMAvM7rvM57v9iLvdhrc9VVV1111VVAcNVVV1111f9711xzzYM/93M/97cAfuM3foOnP/3pvDCSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJK666v8ySUhCEpKQhCQkIQlJSEISkpCEJCQhCUlI4n8rSUhCEpKQhCQkIQlJSEISkvifQhKSkIQkJCEJSUhCEpL47yAJSUhCEpKQhCQkIYn/KpKQhCQkIQlJSEIS/xUkIQlJSEISkpDEfyZJSEISkpCEJCTxX0ESkpCEJCQhCYCnPvWp/Mqv/ArXXHPNgz/8wz/8u6655poHc9VVV1111f93BFddddVVV/2/9+Ef/uHfBfD0pz+d3/zN30QSkpCEJCQhCUlI4qr/GJKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSOKq/1iSkIQkJCEJSUhCEpKQhCQkIQlJSEIS/1tIQhKSkIQkJCEJSUhCEpL4n0ASkpCEJCQhCUlIQhL/HSQhCUlIQhKSkIQk/qtIQhKSkIQkJCGJ/wqSkIQkJCEJSUjiP5MkJCEJSUhCEv8VJCGJP//zP+epT30q11xzzYM/93M/97e56qqrrrrq/zuCq6666qqr/l97x3d8x896sRd7sde+ePEi3/7t387/NZKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlI4v8ySUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCTx/5EkJCGJ+0lCEpKQhCQkIQlJSOJ/MklIQhKSkIQkJCEJSUjiv5skJCEJSUhCEpKQhCT+q0lCEpKQhCQkIYn/KpKQhCQkIQlJSOK/giQkIQlJSEIS/5kkIQlJSEISkpDEf7SLFy/ywz/8w1y4cIEzZ8486MM//MO/i6uuuuqqq/4/I7jqqquuuur/rRd7sRd77Xd6p3f6bICf+Imf4L+DJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpDEVVc9N0lIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhif9LJCEJSUhCEpKQhCQkIQlJSEIS/9NIQhKSkIQkJCEJSUhCEv+dJCEJSUhCEpKQhCT+K0lCEpKQhCQkIQlJ/FeQhCQkIQlJSEIS/9kkIQlJSEISkpDEfyZJSEISkpCEJP49Ll68yDd90zcB8Dqv8zrv/Tqv8zrvzVVXXXXVVf9fEVx11VVXXfX/0jXXXPPgz/3cz/0tgJ/4iZ/g6U9/Ov8akpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxFVX/V8jCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJ/G8lCUlIQhKSkIQkJCEJSUhCEv9TSEISkpCEJCQhCUlIQhL/HSQhCUlIQhKSkIQk/itJQhKSkIQkJCGJ/wqSkIQkJCEJSUjiP5skJCEJSUhCEv+ZJCEJSUhCEpJ4UV28eJEf/uEfBuAd3/EdP+uaa655MFddddVVV/1/RHDVVVddddX/Sx/+4R/+XQBPf/rT+au/+iskIQlJSEISkpCEJCQhCUlI4qr/HJKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkrvrPJQlJSEISkpCEJCQhCUlIQhKSkIQkJPG/hSQkIQlJSEISkpCEJCQhif8JJCEJSUhCEpKQhCQk8V9NEpKQhCQkIQlJSOK/iiQkIQlJSEISkpDEfzZJSEISkpCEJCTxn0kSkpCEJCQhif9MkpCEJCQhCUk8P3/+53/Or/7qr3LNNdc8+HM+53N+i6uuuuqqq/4/Irjqqquuuur/nc/93M/9rRd7sRd77YsXL/Id3/Ed/H8gCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJ/G8iCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJ/H8lCUlIQhKSkMT9JCEJSUhCEpL4n0wSkpCEJCQhCUlIQhKS+O8mCUlIQhKSkIQkJPFfTRKSkIQkJCEJSUjiv4okJCEJSUhCEpL4zyYJSUhCEpKQxH8mSUhCEpKQhCQk8Z9FEpKQhCQkIYk/+7M/46lPfSrXXHPNgz/8wz/8u7jqqquuuur/G4Krrrrqqqv+X3nHd3zHz3qxF3ux1wb4yZ/8Sf6nkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSuOr/L0lIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhif9rJCEJSUhCEpKQhCQkIQlJSEIS/9NIQhKSkIQkJCEJSUhCEv9dJCEJSUhCEpKQhCQk8V9JEpKQhCQkIQlJSOK/giQkIQlJSEISkvjPJAlJSEISkpCEJP4zSUISkpCEJCTxn2V3d5cf+ZEfAeB1Xud13vud3umdPpurrrrqqqv+PyG46qqrrrrq/40Xe7EXe+13eqd3+myA7/iO7+DpT386/x6SkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJK666n8rSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhL/W0lCEpKQhCQkIQlJSEISkvifRBKSkIQkJCEJSUhCEv9dJCEJSUhCEpKQhCT+K0lCEpKQhCQkIYn/CpKQhCQkIQlJ/GeThCQkIQlJSOI/kyQkIQlJSEIS/xEuXrzIj/zIjwDwOq/zOu/9Yi/2Yq/NVVddddVV/18QXHXVVVdd9f/Gh3/4h38XwG/+5m/y9Kc/HUlIQhKSkIQkJCEJSUhCEpKQhCQkIYmr/meQhCQkIQlJSEISkpCEJCQhCUlI4qr/eSQhCUlIQhKSkIQkJCEJSUhCEpKQxP8WkpCEJCQhCUlIQhKSkIQk/ieQhCQkIQlJSEISkpDEfwdJSEISkpCEJCQhif8qkpCEJCQhCUlI4j+bJCQhCUlIQhKS+M8kCUlIQhKSkMR/JklIQhKSkIQk/rX+/M//nF/91V/lzJkzD/rwD//w77rmmmsezFVXXXXVVf8fEFx11VVXXfX/wud+7uf+1jXXXPPgpz/96fzWb/0Wkvj/SBKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJPFvJQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkvj/TBKSkIQkJCEJSUhCEpK4nyQk8T+ZJCQhCUlIQhKSkIQkJCGJ/06SkIQkJCEJSUhCEpL4ryYJSUhCEpKQhCQk8V9BEpKQhCQkIQlJ/GeThCQkIQlJSEIS/1kkIQlJSEISkpDEfxZJSEISkpCEJF6YP//zP+epT30q11xzzYM//MM//Lu46qqrrrrq/wOCq6666qqr/s97x3d8x896sRd7sdfe3d3lJ3/yJ/mfTBKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlI4qr/2yQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCTxf40kJCEJSUhCEpKQhCQkIQlJSOJ/IklIQhKSkIQkJCEJSUjiv4skJCEJSUhCEpKQxH81SUhCEpKQhCQk8V9BEpKQhCQkIQlJ/GeThCQkIQlJSOI/kyQkIQlJSEIS/1kkIQlJSEIS97t48SI/8iM/wsWLF3mxF3ux137Hd3zHz+Kqq6666qr/6wiuuuqqq676P+3FXuzFXvud3umdPhvgJ3/yJ9nd3eU/miQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCGJq676n04SkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxP9WkpCEJCQhCUlIQhKSkIQkJPE/iSQkIQlJSEISkpCEJP47SEISkpCEJCQhCUn8V5KEJCQhCUlIQhL/FSQhCUlIQhKSkMR/JklIQhKSkIQk/jNJQhKSkIQkJPGfQRKSkMTu7i4/8iM/AsA7vdM7ffaLvdiLvTZXXXXVVVf9X0Zw1VVXXXXV/1nXXHPNgz/3cz/3twB+8zd/k6c//ek8N0lIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXHXVVf82kpCEJCQhCUlIQhKSkIQkJCEJSUjifxNJSEISkpCEJCQhCUlIQhL/E0hCEpKQhCQkIQlJSOK/miQkIQlJSEISkpDEfxVJSEISkpCEJCTxX0ESkpCEJCQhif9MkpCEJCQhCUn8Z5KEJCQhCUn8R3va057Gr/3arwHw4R/+4d91zTXXPJirrrrqqqv+r6Jy1VVXXXXV/1kf/uEf/l0AT3/60/nt3/5tJHHVc5LEVf/72Ob/O0n8XySJF4Vt/jtJ4oWxzX8lSbwwtvnPJokXxDb/mSTxgtjmP4MkXhDb/EeTxPNjm3+rX/u1X+PEiRO8/Mu//IM/93M/97c/+IM/+MFcddVVV131fxHBVVddddVV/yd97ud+7m+92Iu92Gvv7u7yXd/1XfxvIwlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXPW/kyQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQk8X+ZJCQhCUlIQhKSkIQkJCGJ/4kkIQlJSEISkpCEJCQhif8ukpCEJCQhCUlIQhKS+K8kCUlIQhKSkIQk/itIQhKSkIQkJCGJ/2ySkIQkJCEJSfxnkoQkJCEJSUjiP4MkJCEJSUhCEi+qX/u1X+PixYucOXPmQR/+4R/+XVx11VVXXfV/EcFVV1111VX/57zYi73Ya7/Yi73YawP85E/+JP9VJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlcddX/BJKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQk/jeThCQkIQlJSEISkpCEJCQhif9JJCEJSUhCEpKQhCQk8d9FEpKQhCQkIQlJSOK/iiQkIQlJSEISkpDEfzZJSEISkpCEJCTxn0kSkpCEJCQhif9MkpCEJCQhif8skpCEJCQhCUk8t4sXL/LN3/zNALzO67zOe7/jO77jZ3HVVVddddX/NQRXXXXVVVf9n/JiL/Zir/25n/u5vwXwnd/5ndx66628KCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkcdVVV71gkpCEJCQhCUlIQhKSkIQkJCEJSUhCEv+bSEISkpCEJCQhCUlIQhKS+J9AEpKQhCQkIQlJSEIS/x0kIQlJSEISkpCEJP6rSEISkpCEJCQhif9skpCEJCQhCUn8Z5KEJCQhCUlI4j+LJCQhCUlIQhL/WSQhCUlIQhIXL17kR3/0RwF4ndd5nfd+sRd7sdfmqquuuuqq/0uoXHXVVVdd9X/KO73TO30WwK233soznvEMJHHVv44krvrvZ5urnk0S/xa2+Z9MEi8K2/x3ksS/xDb/lSTxgtjmv4IkXhDb/GeRxAtim/8Mknh+bPOfQRLPj23+o0niL/7iLzhx4gRv8AZv8OAP//AP/64P+ZAPeQhXXXXVVVf9X0Fw1VVXXXXV/xmf+7mf+1sv9mIv9tq33nor3/Vd38X/JZKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCSu+p9BEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxP9lkpCEJCRxP0lIQhKSkIQkJPE/kSQkIQlJSEISkpCEJCTx30kSkpCEJCQhCUlI4r+SJCQhCUlIQhKSkMR/BUlIQhKSkIQk/rNJQhKSkIQkJPGfRRKSkIQkJCGJ/yySkIQkJCEJSfxH+Iu/+Aue9rSncc011zz4wz/8w7+Lq6666qqr/q8guOqqq6666v+Ed3zHd/ysF3uxF3ttgJ/6qZ/iv5skJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlcddV/JklIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkvjfThKSkIQkJCEJSUhCEpKQhCT+J5GEJCQhCUlIQhKSkMR/F0lIQhKSkIQkJCGJ/0qSkIQkJCEJSUjiP5skJCEJSUhCEpL4zyQJSUhCEpKQxH8WSUhCEpKQhCT+s0hCEpKQhCT+tS5evMiP/uiPAvA6r/M67/1O7/ROn81VV1111VX/FxBcddVVV131v96LvdiLvfY7vdM7fTbAd33Xd7G7u8u/hyQkIQlJSEISkpCEJCQhCUlIQhKSkIQkrrrq/zNJSEISkpCEJCQhCUlIQhKSkIQkJCGJ/20kIQlJSEISkpCEJCQhCUn8TyAJSUhCEpKQhCQkIYn/DpKQhCQkIQlJSEIS/1UkIQlJSEISkpDEfzZJSEISkpCEJP4zSUISkpCEJCTxn0USkpCEJCQhif8MkpCEJCQhCUm8MBcvXuRHf/RHAXid13md936xF3ux1+aqq6666qr/7ahcddVVV131v9o111zz4M/93M/9LYDf+q3f4tZbb+V+krjqP54krvq3s81VL5wk/q1s8z+ZJF4UtvnvJIl/iW3+K0niBbHNfwVJvCC2+c8iiRfENv8ZJPH82OY/gySeH9v8R5PEc7PN/f7iL/6CEydO8AZv8AYP+vAP//Dv+qzP+qzXue+++27lqquuuuqq/60Irrrqqquu+l/twz/8w78L4NZbb+V3fud3kIQkJPF/mSQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkrjq30cSkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhif8vJCEJSUhCEpKQhCTuJwlJSOJ/IklIQhKSkIQkJCEJSUjiv5MkJCEJSUhCEpKQxH8lSUhCEpKQhCQkIYn/CpKQhCQkIQlJ/GeThCQkIQlJSOI/iyQkIQlJSEIS/1kkIQlJSEIS/xkkIQlJSOIv//IvedrTnsY111zz4M/5nM/5La666qqrrvrfjOCqq6666qr/td7xHd/xs17sxV7stXd3d/nu7/5u/qeShCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSVx11b+WJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSOL/CklIQhKSkIQkJCEJSUhCEv/TSEISkpCEJCQhCUlI4r+LJCQhCUlIQhKSkMR/JUlIQhKSkIQkJPGfTRKSkIQkJCEJSfxnkoQkJCEJSUjiP4skJCEJSUhCEv8ZJCEJSUhCEpL4j3Tx4kV+7Md+jIsXL3LNNdc8+B3f8R0/i6uuuuqqq/63Irjqqquuuup/pRd7sRd77Xd6p3f6bICf/umf5j+LJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCSuuur/KklIQhKSkIQkJCEJSUhCEpKQhCQkIQlJ/G8jCUlIQhKSkIQkJCEJSUjifwpJSEISkpCEJCQhCUn8d5CEJCQhCUlIQhKS+K8iCUlIQhKSkIQk/rNJQhKSkIQkJPGfSRKSkIQkJCGJ/yySkIQkJCEJSfxnkIQkJCEJSfx7XLx4kW/91m8F4J3e6Z0++3Ve53Xem6uuuuqqq/43Irjqqquuuup/nWuuuebBn/u5n/tbAL/927/Nrbfeyr9EEpKQhCQkIQlJSEISkpCEJCQhiav+/SQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSuOo/hiQkIQlJSEISkpCEJCQhCUlIQhKS+J9OEpKQhCQkIQlJSEISkpDEfzdJSEISkpCEJCQhCUn8V5OEJCQhCUlIQhL/VSQhCUlIQhKS+M8mCUlIQhKSkMR/JklIQhKSkIQk/rNIQhKSkIQk/jNIQhKSkIQkJPGiunjxIj/2Yz8GwDu+4zt+1jXXXPNgrrrqqquu+t+GylVXXXXVVf/rfPiHf/h3Adx66638zu/8DpK46gpJXPVfQxL/k9jm/xtJ/F8hiReFbf67SOKFsc1/FUm8ILb5zyaJF8Q2/1kk8YLY5j+DJJ4f2/xHk8TzY5v/aJJ4brZ5fv7iL/6Chz70obzcy73cgz/3cz/3tz/4gz/4wVx11VVXXfW/CcFVV1111VX/q3zu537ub73Yi73Ya+/u7vI93/M9/G8lCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpDEVf9/SUISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQk8X+VJCQhCUlIQhKSkIQkJPE/jSQkIQlJSEISkpCEJP67SEISkpCEJCQhCUn8V5GEJCQhCUlIQhKS+M8mCUlIQhKSkIQk/jNJQhKSkIQkJPGfRRKSkIQkJCGJ/wySkIQkJCGJ/wySkIQkJCGJ+/36r/86Fy9e5MyZMw/68A//8O/iqquuuuqq/00Irrrqqquu+l/jdV7ndd77xV7sxV4b4Gd+5mf47yAJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlcddX/FpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkMT/VpKQhCQkIQlJSEISkpCEJP6nkIQkJCEJSUhCEpKQxH8HSUhCEpKQhCQk8V9JEpKQhCQkIYn/CpKQhCQkIQlJ/GeShCQkIQlJSOI/iyQkIQlJSOI/gyQkIQlJSEIS/9EkIYnd3V2+7du+DYDXeZ3Xee93fMd3/Cyuuuqqq67634Lgqquuuuqq/xVe7MVe7LU//MM//LsAvud7vodbb72VfytJSEISkpCEJCQhCUlIQhKSkIQkJHHVVVf920hCEpKQhCQkIQlJSEISkpCEJCQhif8tJCEJSUhCEpKQhCQkIYn/CSQhCUlIQhKSkIQk/qtJQhKSkIQkJCEJSfxXkIQkJCEJSUhCEv/ZJCEJSUhCEpL4zyQJSUhCEpKQxH8GSUhCEpKQhCT+M0hCEpKQhCT+o1y8eJEf//EfB+B1Xud13vvFXuzFXpurrrrqqqv+N6By1VVXXXXV/wof/uEf/l0Av/3bv82tt97K/SRx1YtOElf972Ob/88k8a9lm/+pJPGisM1/F0m8MLb5rySJF8Q2/9kk8YLY5j+LJJ4f2/xnkcRzs81/Bkk8N9v8R5PEc7PNv8Vf/MVfcPz4cV7/9V//wR/+4R/+XZ/1WZ/1Ovfdd9+tXHXVVVdd9T8ZwVVXXXXVVf/jfe7nfu5vXXPNNQ++9dZb+d3f/V0kIQlJ/F8iCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhiav+d5KEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkvi/SBKSkIQkJCGJ+0lCEpKQxP9EkpCEJCQhCUlIQhKS+O8iCUlIQhKSkIQkJPFfSRKSkIQkJCEJSfxXkIQkJCEJSUjiP5MkJCEJSUhCEv9ZJCEJSUhCEpL4zyAJSUhCEpKQxH80SUhCEpKQhCReFH/5l3/J0572NK655poHf/iHf/h3cdVVV1111f90BFddddVVV/2P9o7v+I6f9WIv9mKvDfCzP/uz/E8kCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXHXVfxdJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUjifzNJSEISkpCEJCQhCUlIQhKS+J9CEpKQhCQkIQlJSEIS/x0kIQlJSEISkpCEJP6rSEISkpCEJCQhif9skpCEJCQhCUlI4j+LJCQhCUlIQhL/WSQhCUlIQhKS+M8gCUlIQhKS+M8gCUlIQhKSeG4XL17kx3/8x7l48SIv9mIv9trv9E7v9NlcddVVV131PxnBVVddddVV/2O92Iu92Gu/0zu902cDfM/3fA+7u7v8Z5CEJCQhCUlIQhKSkIQkJCEJSUhCEpK46qqrrpCEJCQhCUlIQhKSkIQkJCEJSUhCEpL430QSkpCEJCQhCUlIQhKS+J9AEpKQhCQkIQlJSEIS/9UkIQlJSEISkpDEfxVJSEISkpCEJCTxn00SkpCEJCQhif8skpCEJCQhCUn8Z5GEJCQhCUn8Z5CEJCQhCUn8Z5CEJCQhCUlcvHiRH//xHwfgdV7ndd77xV7sxV6bq6666qqr/qciuOqqq6666n+ka6655sGf+7mf+1sAv/M7v8MznvEMXhSSkIQkJCEJSUhCEpKQhCQkIYmrnpckJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkrjqBZOEJCQhCUlIQhKSkIQkJCEJSfxPJwlJSEISkpCEJCQhCUn8d5OEJCQhCUlIQhKS+K8kCUlIQhKSkIQkJPFfQRKSkIQkJCGJ/2ySkIQkJCEJSfxnkYQkJCEJSUjiP4MkJCEJSUhCEv/RJCEJSUhCEpL4jyaJpz/96fzGb/wGZ86cedCHf/iHf9c111zzYK666qqrrvqfiOCqq6666qr/kT78wz/8uwCe8Yxn8Lu/+7tIQhKSkIQkJCEJSUhCEv9XSUISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpDEVf95JCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUji/zpJSEISkpCEJCQhCUlIQhKS+J9KEpKQhCQkIQlJSEIS/50kIQlJSEISkpCEJP4rSUISkpCEJCQhif9skpCEJCQhCUlI4j+TJCQhCUlIQhL/WSQhCUlIQhKS+M8gCUlIQhKS+M8gCUlIQhKS+I/wG7/xGzztaU/jmmuuefDnfM7n/BZXXXXVVVf9T0Rw1VVXXXXV/zif+7mf+1sv9mIv9tq7u7t87/d+L/8bSUISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxFVX/VtJQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpDE/xWSkIQkJCEJSUhCEpKQxP8kkpCEJCQhCUlIQhKS+O8iCUlIQhKSkIQk/itJQhKSkIQkJCGJ/2ySkIQkJCEJSfxnkoQkJCEJSUjiP4skJCEJSUjiP4MkJCEJSUjiP4MkJCEJSUji3+LHf/zHuXjxItdcc82DP/zDP/y7uOqqq6666n8agquuuuqqq/5HebEXe7HXfrEXe7HXBvjZn/1Z/rtIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXHXV/1WSkIQkJCEJSUhCEpKQhCQkIQlJSEIS/9tIQhKSkIQkJCEJSUhCEpL4n0ASkpCEJCQhCUlIQhL/1SQhCUlIQhKSkIQk/qtIQhKSkIQkJPGfTRKSkIQkJCGJ/0ySkIQkJCEJSfxnkIQkJCEJSUjiP5okJCEJSUhCEv/RJCEJSUhCEv+S3d1dvv3bvx2A13md13nvd3zHd/wsrrrqqquu+p+E4Kqrrrrqqv8xrrnmmgd/7ud+7m8BfO/3fi/PeMYz+PeShCQkIQlJSEISkpCEJCQhCUlI4qqrrvrPIQlJSEISkpCEJCQhCUlIQhKSkMT/BpKQhCQkIQlJSEISkpDEfzdJSEISkpCEJCQhif9qkpCEJCQhCUlI4r+CJCQhCUlIQhKS+M8kCUlIQhKSkMR/JklIQhKSkMR/FklIQhKSkMR/BklIQhKSkMR/NElIQhKSkMRzu3jxIj/+4z8OwOu8zuu894u/+Iu/NlddddVVV/1PQeWqq6666qr/MT78wz/8uwCe8Yxn8IxnPIPnJomr/m0kcdX/Lra56tkk8a9lm/+JJPEvsc1/F0m8MLb5ryKJF8Q2/9kk8fzY5j+LJJ4f2/xnkMTzY5v/aJJ4brb5jyaJ52ab/0iSeG5/+Zd/yYkTJ3i913u9B3/4h3/4d3/wB3/wg7nqqquuuup/AoKrrrrqqqv+R/jcz/3c33qxF3ux137GM57B933f9yEJSUhCEpL4v04SkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJXPW/jyQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxP8HkpCEJCQhiftJQhKSkMT/NJKQhCQkIQlJSEISkvjvIglJSEISkpCEJCTxX0USkpCEJCQhCUn8Z5OEJCQhCUlIQhL/WSQhCUlIQhKS+M8iCUlIQhKSkMR/NElIQhKSkIQk/qNJQhKSkIQk/qNJ4q/+6q94+tOfzpkzZx704R/+4d/FVVddddVV/xMQXHXVVVdd9d/uHd/xHT/rxV7sxV4b4Hd/93f530QSkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxFVX/VeShCQkIQlJSEISkpCEJCQhCUlIQhKSkIQk/q+QhCQkIQlJSEISkpCEJCTxP4UkJCEJSUhCEpKQhCT+O0hCEpKQhCQkIYn/KpKQhCQkIQlJSOI/myQkIQlJSEIS/1kkIQlJSEISkvjPIglJSEISkvjPIAlJSEISkviPJglJSEISkvj3unjxIj/xEz8BwOu8zuu89zu+4zt+FlddddVVV/13o3LVVVddddV/qxd7sRd77Xd6p3f6bIDv+77v4xnPeAb/1SRx1VVX/dtI4t/KNv9d3uIt3oKr/uexzQNJwjYPJAnbPJAkbPNAkrDNA0nCNg8kCdv8f2Gb/0tscz9J2OaBJGGbB5KEbR5IErZ5IEnY5t9id3eX48eP8zqv8zrv/Q//8A+/8w//8A+/zVVXXXXVVf9dqFx11VVXXfXf5pprrnnw537u5/4WwO/+7u/yjGc8g38vSVz1H0cSV/3b2OaqF04S/1q2+Y/wUi/1Ulx11VVX/We75pprHsxVV1111VX/3ahcddVVV1313+bDP/zDvwvgGc94Br/7u7/L8yOJq66QxFX/e0jiv5pt/q+TxL+WbZ7b3/7t33LVv55t/jVs8x/NNi8K20jigWwjCdu8MLb597DNC2Kbfw/bvKhsI4n72eaFsc2/h21eGNv8e9jmhbGNJB7INpK4n21eGNv8e9kG4Prrr+cRj3gEL/ZiL/Za//AP//DbXHXVVVdd9d+FylVXXXXVVf8t3vEd3/GzXuzFXuy1L126xPd///cjif+LJHHVVf9VJPEfyTb/F0jiud1xxx38SyTxf5Ft/j1s869hmxeFbV4UtvmX2OaFsc0LY5sXxjYvjG1eGNu8ILZ5YWzzwtjmBbHNC2ObF8Y2L4xtXhjbvDC2eWFs88LY5l9imxfGNi+Mbf4ltgG4/vrrATh79uwzuOqqq6666r8Tlauuuuqqq/7LvdiLvdhrv9M7vdNnA/zcz/0c/1NJ4qqr/j+TxL+Hbf43ksT/ZZIAsM2/hSRs86KShG3+JZKwzb9EErZ5YSRhmxdEErZ5QSRhmxdEErb5zyAJ21z1v9/1118PwD/8wz/8NlddddVVV/13onLVVVddddV/qWuuuebBn/u5n/tbAL/7u7/LM57xDP6zSeKq/z0k8R/FNlf995HEv4Vt/rtI4v8LSQDY5l9LEgC2eVFIwjb/EknY5l8iCdv8TyUJ21z1bLb572ab/0pbW1sA3Hfffbdy1VVXXXXVfycqV1111VVX/Zf68A//8O8CeMYznsHv/d7v8W8hiav+ZZL4/04S/1vZ5v8rSfxr2ebfQxL/X0kCwDb/WpKwzYtCErb5l0jCNv9ekrDNCyIJ27wgkrDN/yWSsM1VV1111VVX/T9D5aqrrrrqqv8yn/u5n/tbL/ZiL/baly5d4vu///u5nyT+v5LEVVc9P5L4z2Cb/4sk8W8lif9skviPYpv/DJIAsM2/hiRs86KQhG3+JZKwzQsjCdv8d5GEbf4tJGGbfwtJ2OZ/G0nY5v862wA84hGPAOC3fuu3vpurrrrqqqv+u1G56qqrrrrqv8SLvdiLvfaLvdiLvTbAz/3czyGJ/+0kcdVV/9tI4j+Cbf4vkMR/NEn8Z5LEc7PNfxRJANjmRSUJANv8SyRhm3+JJGzzwkjCNi+IJGzzgkjCNi+IJGzzbyEJ21z1v4dtrrrqqquu+j+JylVXXXXVVf/pXuzFXuy1P/dzP/e3AL7/+7+f2267jf8pJHHVVVf960ni38o2/90k8R9JEv+dJPFAtvn3kgSAbV5UkrDNv0QStvmXSMI2L4wkbPOCSMI2/xkkYZv/aJKwzb+FJGzzbyEJ21z173f99dcD8A//8A+/w1VXXXXVVf/dqFx11VVXXfWf7sM//MO/C+Bv//Zvue222/jPIomr/uNI4qp/Pdtc9cJJ4l/LNv/TSOJ/Kkk8kG3+rSRhmxeVJGzzL5GEbf67ScI2L4gkbPMfTRK2ueqqq6666qqr/tNRueqqq6666j/V537u5/7WNddc8+BnPOMZ/PzP/zz/GpK46tkkcdX/fJL4r2Sb/w8k8a9hm/8MkvjfSBL3s82/liQAbPOikASAbV4YSQDY5gWRhG1eGEnY5gWRhG1eEEnY5j+aJGzzH00Strnqf67rrrsOgH/4h3/4ba666qqrrvrvRuWqq6666qr/NO/4ju/4WS/2Yi/22gA///M/D4Ak/r+QxFVX/WeTxH8k2/xfIIn/SJL4v0ISALb515IEgG1eFJKwzb9EErZ5QSRhmxdGErZ5QSRhm38LSdjm+ZGEbf6jScI2/9EkYZur/vVs86La3t4G4L777ruVq6666qqr/rtRueqqq6666j/Fi73Yi732O73TO302wA/8wA+wt7eHJP43kcRVV/1/I4l/D9v8XyKJ/6skcT/b/GtIAsA2/xJJ2OZfIgnbvCCSsM0LIwnb/FtIwjb/0SRhm+dHErb530IStrnqhdva2gLgvvvuu5Wrrrrqqqv+J6By1VVXXXXVf7hrrrnmwZ/7uZ/7WwC/93u/x2233cZ/N0lcddVV//kk8a9lm/9pJPFfQRIvKtv8Z5EEgG3+NSRhm3+JJABs88JIwjYviCRs88JIwjbPjyRs828hCds8P5Kwzf8UkrDNVf89rr/+egD+4R/+4be56qqrrrrqfwIqV1111VVX/Yf78A//8O8CuO222/j93/99/qNJ4qoXnSSu+p/NNv+fSeJfyzb/GSTxH0kS/1Ek8cLY5t9LEvezzYtCEgC2+ZdIwjYvjCRs84JIwjb/VpKwzfMjCdv8V5KEbZ4fSdjm+ZGEba76n2dra4urrrrqqqv+R6Fy1VVXXXXVf6gP//AP/64Xe7EXe+1Lly7xAz/wA7yoJPH/mSSu+v9LEv9ZbPN/kSReVLb5l0jiP4Ik/rtI4rnZ5t9KEgC2eVFIAsA2L4wkbPPCSMI2L4gkbPOCSMI2L4gkbPP8SMI2z48kbPP8SMI2z48kbPO/gSRsc9W/nm0Atre3AfiHf/iH3+Gqq6666qr/CahcddVVV131H+bFXuzFXvt1Xud13hvg53/+55HE/3WSuOqq/8kk8e9lm//NJPGCSOLfQxL/k0nigWzzryUJANu8KCRhmxdGEgC2eUEkYZsXRBK2eUEkYZurnpckbPMfTRK2+f9ua2sLgPvuu+9Wrrrqqquu+p+AylVXXXXVVf8hrrnmmgd/7ud+7m8B/OAP/iC33347/1tI4qqrrnrBJPFvZZv/qSTxbyWJ/40kcT/b/GtIAsA2/xJJANjmhZGEbV4QSdjmBZGEbV4QSdjm+ZGEbZ4fSdjm+ZGEbZ4fSdjm+ZGEbZ4fSdjm+ZGEbZ4fSdjm+ZGEba76r7e9vQ3A2bNnb+Wqq6666qr/CahcddVVV131H+LDP/zDvwvgtttu47bbbuO/iySu+s8nif9PbHPVv40k/rVs859NEv9akvi/RBL3s82LShIAtvmXSMI2L4wkbPOCSMI2L4gkbPOCSMI2z48kbPP8SMI2z48kbPP/kSRsc9ULtrW1BcB99913K1ddddVVV/1PQOWqq6666qp/t8/93M/9rRd7sRd77UuXLvGDP/iD/EeTxFXPSxJX/deQxH8n2/x/Iol/Ddv8Z5HEfxZJ/HvY5j+KJO5nmxeFJABs88JIAsA2L4gkbPOCSMI2L4gkbPOCSMI2z48kbPMfRRK2eX4kYZvnRxK2+Z9AErb5jyYJ27wgkrDN/2bXX389AP/wD//wO1x11VVXXfU/BZWrrrrqqqv+Xd7xHd/xs17sxV7stQF+4Rd+gReVJP6/kcRVV/1bSOI/km3+L5HEfzRJ/EeQxH8WSbwgtvm3kgSAbV4UkgCwzQsjCdu8IJIAsM3zIwnbvCCSsM1/JEnY5vmRhG2eH0nY5j+KJGzz/EjCNs+PJGzz/EjCNlf9x9ra2gLgvvvuu5Wrrrrqqqv+p6By1VVXXXXVv9mLvdiLvfY7vdM7fTbAD/7gD3Lbbbchif+LJHHVVf9XSOLfyzb/F0ni30MS/xNI4rnZ5l9DEvezzb9EEgC2eUEkAWCbF0QStnl+JAFgm+dHErZ5fiRhm+dHErZ5fiRhm+dHErb515CEbZ4fSdjmqv+9tra2ALjvvvuezlVXXXXVVf9TULnqqquuuurf5Jprrnnwh3/4h38XwO///u9z++23I4n/6SRx1VVX/ftJ4t/CNv8TSeLfQhL/W0jigWzzopIEgG3+JZKwzQsjCdu8IJKwzQsiCds8P5KwzfMjCds8P5KwzfMjCdv8a0jCNv9RJGGb50cStvmfQBK2+f9qe3sbgLNnzz6Dq6666qqr/qegctVVV1111b/Jh3/4h3/XNddc8+DbbruNP/iDP+C/iySu+veRxFX/sWxz1fMniX8N2/xnksS/liT+L5DE/WzzopAEgG1eGEkA2OYFkQSAbZ4fSdjmBZGEbZ4fSdjm+ZGEbZ4fSdjmX0MStvnXkIRtnh9J2OY/iiRs8/xIwjbPjyRs8/xIwjb/1SRhm//Jrr/+egD+4R/+4be56qqrrrrqfwoqV1111VVX/au94zu+42e92Iu92GtfunSJH/qhH+I/miSuAklc9b+TJP4r2Ob/Okm8qGzzryGJfw1J/EeTxL+Hbf4jSOJ+tvmXSALANi+MJABs84JIwjbPjyQAbPP8SMI2z48kbPP8SMI2/xqSsM2/hiRs8x9FEra56n+ura0trrrqqquu+h+HylVXXXXVVf8qL/ZiL/ba7/RO7/TZAL/4i7/Ii0oS/19I4qqr/itI4j+Kbf63k8SLShIvCkn8e0niP4skXhjb/GtJ4n62eWEkAWCbF0YStnlBJGGbF0QStnl+JGGb50cStnl+JGGb5yYJ2zw/krDNc5OEbZ4fSdjmuUnCNs+PJGzzryEJ2/xPJwnb/F9333333cpVV1111VX/U1C56qqrrrrqRXbNNdc8+HM/93N/C+D3f//3ue222wCQxP81krjqqv9PJPFvZZv/ayTxbyGJ/0kk8UC2+deQBIBtXhhJANjmBZEEgG2eH0kA2Ob5kYRtnh9J2Ob5kYRtnh9J2Oa5ScI2/xqSsM2/hiRs868hCdv8a0jCNs+PJGzzH0kStvm3kIRt/i0kYZv/Lo94xCMA+Id/+Iff5qqrrrrqqv9JqFx11VVXXfUi+/AP//DvArjtttv4wz/8QyTxv4Ekrrrqqv88kvjXss3/RJL415LE/xaSeCDbvCgkcT/bvCCSALDNCyIJANs8P5KwzfMjCds8P5KwzfMjCdv8a0jCNs9NErb515CEbf41JGGbfw1J2OY/iiRs8/xIwjZXPa/77rvvVq666qqrrvqfhMpVV1111VUvks/93M/9rRd7sRd77UuXLvHDP/zD/HeSxFUvOklc9T+Hba4CSfxr2OY/kyReVJL4zySJF8Y2/1Ek8UC2+ZdIAsA2L4gkAGzzgkjCNs+PJABs89wkYZvnRxK2eX4kYZvnJgnbPD+SsM1zk4RtnpskbPOvIQnb/GeThG2u+s9z/fXXA3DffffdylVXXXXVVf+TULnqqquuuupf9GIv9mKv/WIv9mKvDfCLv/iL/GeQxP9nkrjq/wdJ/Gexzf9VknhR2eZFJYkXlST+PSTxH0ESLwrb/GtJ4n62eWEkAWCbF0QSALZ5fiQBYJvnRxK2eW6SALDNc5OEbZ4fSdjmuUnCNv8akrDNc5OEbZ6bJGzzryEJ2zw3SdjmP4okbHPVf4yzZ88+g6uuuuqqq/4noXLVVVddddUL9WIv9mKv/bmf+7m/BfBDP/RD3H777fxrSOL/OklcddX/BJL4j2Cb/80k8S+RxItCEv8WkvjvJonnZpsXlSTuZ5sXRBIAtnlBJAFgm+dHErZ5fiRhm+dHErZ5bpKwzfMjCds8N0nY5rlJwjb/ESRhm+cmCdv8R5CEbf6jSMI2z48kbPP8SMI2z48kbPNvIQnb/FtIwjb/Wa6//noA/uEf/uG3ueqqq6666n8SKlddddVVV71Q7/RO7/RZAH//93/P7bffzv0k8X+JJK666qorJPFvYZv/KyTxryGJ/w0k8UC2eVFIAsA2L4gkAGzzgkjCNs+PJABs89wkYZvnRxK2eW6SsM3zIwnbPDdJ2Oa5ScI2z00StnlukrDNfwRJ2Oa5ScI2/xqSsM1V/zm2trYAuO+++27lqquuuuqq/0moXHXVVVdd9QJ97ud+7m+92Iu92Gvffvvt/NIv/RKS+N9CElf995PE/yS2ueo/jyT+tWzzP4kkXlSS+I8miReVbf69JPFAtnlhJHE/2zw/kgCwzfMjCQDbPD+SsM1zkwSAbZ6bJGzz3CRhm38NSdjmuUnCNs9NErZ5bpKwzXOThG2emyRs8x9BErb515CEbf4nkIRt/jfZ2toC4L777ruVq6666qqr/qehctVVV1111fP1ju/4jp/1Yi/2Yq8N8Eu/9Ev8d5PEVS+cJK564STxP5Ft/r+SxIvKNv9ZJPGikMS/lST+I0niX2Kbfw1J3M82L4wkAGzz/EgCwDbPjyQAbPPcJAFgm+cmCds8N0nY5rlJwjbPTRK2eX4kYZvnJgnbPDdJ2Oa5ScI2z00StnlukrDNc5OEbZ6bJGzzryEJ2/xrSMI2/9dJwjb/Ftdffz0A//AP//DbXHXVVVdd9T8Nlauuuuqqq57Hi73Yi732O73TO302wA//8A9z6dIl/jNI4v8rSVx11f0k8R/NNv/XSOJFZZsXhST+JZL415LE/wSSeG62eVFI4n62eUEkAWCb50cSALZ5fiRhm+dHErZ5bpKwzXOThG2emyRs89wkYZvnRxK2eW6SsM3/dJKwzb+GJGzzryEJ2zw/krDN8yMJ2/xHk4RtrrrqqquuuuoBqFx11VVXXfUcrrnmmgd/7ud+7m8B/MEf/AG33347/xaS+L9MEldd9T+ZJP49bPO/mSReGEn8SyTxopLE/xaSeCDb/EskcT/bPD+SALDN8yMJANs8N0kA2Oa5ScI2z00SALZ5IEkA2OaBJAFgmweShG2eH0nY5kUhCds8N0nY5rlJwjbPTRK2eW6SsM1zk4Rt/jUkYZur/uNcd911APzDP/zD73DVVVddddX/NFSuuuqqq656Dh/+4R/+XQC33347f/iHf8hzk8T/JZK46qqrnpck/i1s87+dJF4Ukvj3ksR/NNv8a0jigWzzwkgCwDbPjyQAbPP8SALANs9NErZ5bpIAsM1zk4RtnpskbPPcJGGbB5KEbV5UkrDNc5OEbZ6bJGzz3CRhm38vSdjmuUnCNv8RJGGb/yqSsM3zIwnb/E+ytbXFVVddddVV/2NRueqqq6666lne8R3f8bNe7MVe7LUvXbrEj/zIjyCJ/00kcdV/DUn8X2Wbq/7tJPGvZZv/bpJ4UUjiX0sS/5Uk8fzY5kUhifvZ5gWRBIBtnh9JANjm+ZGEbZ6bJABs89wkYZvnJgnbPDdJ2Oa5ScI2DyQJ2zw3SdjmuUnCNs9NErb595CEbZ6bJGzzn0kStvnXkIRtnh9J2Ob/AknY5vnZ3t4G4B/+4R9+m6uuuuqqq/6noXLVVVddddVlL/ZiL/ba7/RO7/TZAL/8y7/M/xSSuOr5k8RV//Ek8d/JNv/fSOJFZZv/SJL4l0jiX0MS/xNJ4rnZ5oWRxP1s8/xI4n62eW6SALDNc5MEgG2emyRs89wkYZvnJgnbPDdJ2Oa5ScI2DyQJ2zw3SdjmuUnCNi8KSdjmuUnCNs9NErZ5bpKwzXOThG2emyRs89wkYZt/DUnY5j+KJGzzX0kStvmPtrW1BcB99913K1ddddVVV/1PQ+Wqq6666iquueaaB3/u537ubwH80i/9Erfffjv/2STx/40krrrqXyKJ/0i2+b9EEi8q27wgkviXSOJFIYn/CJL4t7LNv4UkHsg2L4gk7meb50cSALZ5bpIAsM1zkwSAbR5IEgC2eSBJANjmgSRhm+cmCds8N0nY5oEkYZvnJgnbPDdJ2OaBJGGb5yYJ2zw3SdjmfwpJ2OZfQxK2+f/ouuuuA+C+++67lauuuuqqq/4nonLVVVdddRUf/uEf/l0At99+O//wD//Av4ck/q+SxFVX/W8jiX8P2/xvJYl/C0n8SyTxryWJ/yySeGFs86KQxP1s84JIAsA2z48kAGzz3CQBYJvnJgnbPDdJ2Oa5ScI2DyQJANs8kCRs89wkYZsHkoRtnpskbPOikIRtnpskbPOikIRtnpskbPPcJGGb5yYJ2zw3SdjmP5skbPOvJQnbPD+SsM3zIwnb/FfZ3t4G4B/+4R9+m6uuuuqqq/4nonLVVVdd9f/c537u5/7Wi73Yi732pUuX+JEf+RFeGEn8XyGJq6666l8miX8t2/xvI4l/iSReVJL4n0QSz802L4wk7meb50cS97PNc5MEgG2emyRs89wkAWCbB5IEgG0eSBK2eW6SsM0DScI2z00StnkgSdjmuUnCNg8kCds8N0nY5kUhCds8N0nY5n8KSdjmP4okbPO/2dbWFgD33XffrVx11VVXXfU/EZWrrrrqqv/H3vEd3/GzXuzFXuy1AX75l38ZSfxvJYmr/vNI4v8r21z1ryOJfw3b/HeRxAsjiReFJP4jSOLfwjb/WpJ4INu8IJK4n22eH0kA2Oa5SQLANg8kCQDbPDdJ2Oa5ScI2DyQJ2zw3SdjmgSRhm+cmCds8kCRs89wkYZsHkoRtXhSSsM1zk4RtXhSSsM1zk4RtnpskbPPcJGGb5yYJ2/xrSMI2/5tJwjb/GltbWwCcPXv2GVx11VVXXfU/EZWrrrrqqv+nXuzFXuy13+md3umzAX70R3+UO+64g/9pJHHV85LEVf91JPFfzTb/n0jiRWWb/wiSeGEk8S+RxL+WJP4zSOKFsc2/RBIPZJvnRxL3s81zkwSAbZ6bJABs80CSALDNA0kCwDYPJAnbPJAkAGzzQJKwzQNJwjbPTRK2eSBJ2Oa5ScI2DyQJ2zyQJGzz3CRhmxeFJGzz3CRhm/9qkrDNv4YkbPN/0XXXXQfAP/zDP/w2V1111VVX/U9E5aqrrrrq/6kP//AP/y6AP/zDP+T222/nv5Ik/j+RxFVX/WtI4j+Kbf4vkcSLyjb/WpJ4YSTxopLE/xSSeG62eWEkcT/bPD+SALDNc5MEgG2emyRs89wkYZvnJgnbPJAkAGzzQJKwzQNJwjYPJAnbPDdJ2OaBJGGbF4UkbPNAkrDNi0IStvn3kIRtnpskbPPcJGGb5yYJ2/x3koRtnh9J2Ob5kYRtnh9J2Oaqq6666qr/N6hcddVVV/0/9Lmf+7m/dc011zz49ttv54/+6I/4jyKJ/6skcdVV/xtJ4t/DNv9bSeJFJYkXRhL/Ekn8e0ji38s2LypJPJBtXhBJ3M82z00SALZ5bpIAsM0DSQLANg8kCQDbPJAkAGzzQJKwzQNJwjYPJAnbPJAkbPPcJGGbB5KEbR5IErZ5bpKwzQNJwjYPJAnbPDdJ2OaBJGGb5yYJ2/xPIQnb/GtIwjb/W21vbwNw33333cpVV1111VX/E1G56qqrrvp/5h3f8R0/68Ve7MVee29vj1/+5V/mX0MS/xdI4qqrrnrRSOJfyzb/W0jiBZHEv0QS/xqS+M8kiRfENi+MJB7INs+PJABs89wkcT/bPJAkAGzzQJIAsM0DScI2z00StnkgSdjmgSRhmweShG0eSBIAtnkgSdjmgSRhmweShG1eFJKwzQNJwjYvCknY5kUhCds8N0nY5rlJwjbPTRK2eW6SsM2/hiRs87+ZJGxzv+uuuw6Af/iHf/htrrrqqquu+p+KylVXXXXV/yMv9mIv9trv9E7v9NkAv/zLv8ze3h73k8T/VpK46j+eJK66wjZXvegk8a9hm/9qknhBJPHCSOJFIYn/SSTx3GzzgkjifrZ5bpK4n22emyQAbPNAkgCwzQNJAsA295MEgG0eSBK2eSBJ2OaBJAFgm/tJAsA2DyQJ2zyQJGzzQJKwzQNJwjYPJAnbvCgkYZsHkoRtXhSSsM1zk4Rt/qtJwjb/USRhm/+Jtre3Abjvvvtu5aqrrrrqqv+pqFx11VVX/T9xzTXXPPhzP/dzfwvgj/7oj7jjjjuQxP9UkrjqeUniqv96kvivZJv/TyTxorLNfxZJvCCS+JdI4t9CEv8ZbPMvkcQD2eb5kcT9bPPcJAFgm+cmCQDbPJAkAGzzQJKwzQNJwjYPJAkA29xPEgC2eSBJ2OaBJGGbB5KEbR5IErZ5IEnY5oEkYZsHkoRtHkgStnlRSMI2DyQJ2zw3SdjmRSEJ2zw3SdjmuUnCNs9NErb5jyAJ2/xrScI2/5EkYZsXxXXXXQfAfffddytXXXXVVVf9T0Xlqquuuur/iQ//8A//LoDbb7+dP/qjP+K/kyT+P5HEVVf9a0jiP4pt/i+RxIvCNi8qSbwgknhhJPGikMR/NUk8P7Z5QSTxQLZ5bpK4n20eSBIAtnlukgCwzQNJwjYPJAkA29xPEgC2eSBJ2OaBJGGbB5KEbR5IErZ5IEnY5oEkYZt/iSRs80CSsM0DScI2DyQJ27woJGGbF4UkbPM/hSRs819BErZ5fiRhm/8oZ8+efQZXXXXVVVf9T0Xlqquuuur/gc/93M/9rRd7sRd77b29PX7sx36M/yyS+L9KEldd9b+RJP6tbPO/lST+JZJ4fiTxwkjiXyKJ/wiSeEFs828hiedmm+dHEvezzXOTBIBtHkgS97PNA0nCNg8kCQDbPJAkbPNAkrDNA0nCNg8kCds8kCRs80CSsM0DScI2DyQJ29xPErZ5bpKwzQNJwjYPJAnbPJAkbPNAkrDNi0IStnlRSMI2z00StnlukrDNc5OEbZ6bJGzzryEJ2/xvcv311wPwD//wD7/NVVddddVV/1NRueqqq676P+7FXuzFXvvFXuzFXhvgl3/5l/m3ksT/FZK46qqr/mWS+Neyzf8GknhuknhBJPHCSOJfQxL/XpJ4UdnmhZHEA9nmuUnifrZ5IEnczzYPJAkA29xPEgC2eSBJANjmfpIAsM39JAFgm/tJAsA295OEbR5IErZ5IEnY5oEkYZsXRhK2+Y8kCds8kCRs80CSsM2LQhK2eW6SsM3/BpKwzf80W1tbANx33323ctVVV1111f9UVK666qqr/g97sRd7sdf+3M/93N8C+NEf/VHuuOMOXhBJ/G8liav+c0ji/zvbXPWik8S/hm3+u0niBZHECyKJF4Uk/rtJ4rnZ5gWRxP1s89wkAWCb5yYJANs8kCQAbHM/SQDY5oEkYZsHkoRtHkgStnkgSdjmfpIAsM39JGGbB5KEbR5IEra5nyRs80CSsM0DScI2DyQJ2zyQJGzzbyUJ2zyQJGzz3CRhmxeFJGzz3CRhm+cmCds8N0nY5rlJwjb/USRhm/8qkrDN1tYWV1111VVX/a9A5aqrrrrq/7B3eqd3+iyA22+/nTvvvBNJ/G8iiauekySu+q8lif9Ktvn/RBIvKtv8R5LE8yOJF0QS/xJJ/FtI4j+CbV4UknhutnlukrifbR5IEvezzQNJAsA2DyQJ2zyQJABscz9JANjmfpIAsM39JGGbB5KEbR5IEra5nyRs80CSsM0DScI295OEbR5IErZ5IEnY5oEkYZsHkoRtHkgStnkgSdjmRSEJ27woJGGb/ykkYZv/KJKwzfMjCds8P5KwzQtz/fXXA/Bbv/Vb38NVV1111VX/k1G56qqrrvo/6nM/93N/68Ve7MVe+4477uDHf/zH+Z9EEv+fSOKqq15UkviPYpv/SyTxorDNv0QSz00SL4gkXhBJvKgk8Z9NEi+IbV4YSdzPNs9NEvezzQNJAsA2DyQJANvcTxIAtnkgSdjmgSRhmweShG3uJwkA29xPErZ5IEnY5n6SsM0DScI2DyQJ29xPErZ5IEnY5oEkYZsHkoRtHkgStnkgSdjmgSRhmweShG1eFJKwzYtCErZ5bpKwzXOThG2emyRs89wkYZt/DUnY5qqrrrrqqqv+lahcddVVV/0f9I7v+I6f9WIv9mKvDfArv/Ir/FeSxP9Fkrjqqv9tJPFvZZv/rSTxryGJ50cSL4gk/iWS+PeSxL/ENi8qSTw32zw/krifbZ6bJABs80CSALDNA0kCwDb3kwSAbe4nCQDb3E8SALa5nyRs80CSsM39JAFgm/tJwjb3kwSAbe4nCds8kCRscz9J2OaBJGGbB5KEbR5IErZ5IEnY5l8iCds8kCRs80CSsM2LQhK2+d9MErb5r3TdddcB8A//8A+/zVVXXXXVVf+TUbnqqquu+j/mxV7sxV77nd7pnT4b4Md+7MfY29vjP4ok/i+QxFVXXfXCSeJfyzb/m0ji+ZHE8yOJf4kkXhSS+I8iiReFbZ4fSTyQbZ6bJO5nmweSxP1scz9JANjmgSQBYJv7SQLANveTBIBt7icJ29xPEgC2uZ8kbPNAkrDN/SRhmweShG3uJwnbPJAkbHM/SdjmgSRhmweShG3+tSRhm38rSdjmgSRhmxeFJGzz3CRhm/8skrDNfxRJ2Oaqq6666qr/t6hcddVVV/0fcs011zz4cz/3c38L4I/+6I+44447+NeQxP9WkrjqP5ck/j+wzVX/NpL417DNfxdJPDdJPD+SeEEk8S+RxP8Eknhutnlukngg2zyQJO5nmweSBIBt7icJANs8kCQAbHM/SdjmgSRhm/tJAsA295OEbe4nCQDb3E8StrmfJGzzQJKwzf0kYZsHkoRt7icJ2zyQJGzzQJKwzf0kYZsHkoRtHkgStnkgSdjmgSRhm38rSdjm30MStnlukrDNc5OEbf41JGGb/yiSsM2/xfXXXw/AP/zDP/w2V1111VVX/U9G5aqrrrrq/5AP//AP/y6AO+64gz/+4z/muUnifxNJXPX8SeKq/xyS+O9gm/9vJPGisM1/Jkk8P5J4fiTxwkjiRSWJ/2y2eUEk8UC2eW6SuJ9tHkgS97PN/SQBYJv7SQLANg8kCdvcTxIAtrmfJABscz9J2OZ+krDNA0nCNveThG3uJwnbPJAkbHM/SdjmgSRhm/tJwjYPJAnbvDCSsM0DScI2DyQJ2zyQJGzzQJKwzQNJwjYPJAnbvCgkYZvnJgnb/E8iCdv8R5GEbZ4fSWxtbQFw33333cpVV1111VX/k1G56qqrrvo/4h3f8R0/68Ve7MVee29vjx//8R9HEv+TSeL/G0lcddULIon/KLb5v0QSLwrb/GtI4rlJ4gWRxAsiiX+JJP47SOL5sc1zk8QD2eaBJHE/2zyQJABscz9JANjmfpIAsM39JAFgm/tJAsA295OEbe4nCdvcTxIAtrmfJGxzP0nY5n6SALDN/SRhm/tJwjYPJAnb3E8StnlhJGGbB5KEbR5IErb5zyQJ2zyQJGzz3CRhmxeFJGzz3CRhm+cmCds8N0nY5vmRhG3+O1133XUA3Hfffbdy1VVXXXXV/3RUrrrqqqv+D3ixF3ux136nd3qnzwb41V/9Vf47SeL/MklcddX/dJL4t7LN/1aSeFFJ4oEk8fxI4gWRxAsiiX8NSfxnsM0LIokHss1zk8T9bPNAkgCwzQNJAsA295MEgG3uJwkA29xPEgC2uZ8kbHM/SdjmfpIAsM39JGGb+0nCNveThG0eSBK2uZ8kbHM/SdjmhZGEbe4nCds8kCRs80CSsM0LIwnbPJAkbPNAkrDNA0nCNi8KSdjmRSEJ2/xvIAnb/EfZ2toC4B/+4R9+m6uuuuqqq/6no3LVVVdd9b/cNddc8+DP/dzP/S2AP/7jP+aOO+7gP5Mk/q+QxFVXXfWcJPGvZZv/rSTx/Eji+ZHECyKJf4kk/itJ4vmxzXOTxAPZ5oEkcT/b3E8S97PN/SQBYJv7SQLANveTBIBt7icJ29xPEgC2AZAEgG3uJwnb3E8StrmfJGxzP0kA2OZ+krDN/SRhm/tJwjb3k4RtHkgStrmfJGzzQJKwzQsjCds8kCRs80CSsM0DScI2DyQJ2zyQJGzzopCEbV4UkrDNc5OEbZ6bJGzz3CRhm38NSdjmX0MStvnX2Nra4qqrrrrqqv81qFx11VVX/S/34R/+4d8FcMcdd/DHf/zH/HtJ4n8rSVz1X08S/9vY5qr/OJL417DN/wSSeG6SeG6SeEEk8YJI4l9DEv+RbPOCSOK52eaBJHE/2zyQJABs80CSALDN/SQBYJv7SQLANveThG3uJwkA29xPEra5nyRscz9J2OZ+krDN/SQBYJv7ScI295OEbe4nCdvcTxK2uZ8kbPNAkrDN/SRhmweShG3uJwnbPJAkbPNAkrDNfxRJ2OaBJGGbF4UkbPNfTRK2+c8mCds8t+3tbQD+4R/+4Xe46qqrrrrqfzoqV1111VX/i33u537ub73Yi73YawP88R//MTfddBP/Eklc9X+LJK7638c2V/33kcQDSeK5SeL5kcQLIokXRhL/VSTxgtjmuUnigWxzP0nczzb3k8T9bHM/SQDY5n6SALDN/SQBYBsASQDY5n6SsM39JGGb+0kCwDYAkgCwDYAkAGxzP0nY5n6SsM39JGGb+0nCNveThG3uJwnbPJAkbHM/SdjmgSRhm/tJwjYPJAnbvDCSsM0DScI2DyQJ2/xbScI2LwpJ2Oa5ScI2/x0kYZv/CNdddx0A9913361cddVVV131Px2Vq6666qr/pa655poH8wBv//Zvz1VXXXXVVf86knhuknhuknh+JPHCSOJFJYn/SLZ5QSTxQLZ5bpK4n23uJ4n72eZ+kgCwzf0kAWCb+0kCwDb3k4Rt7icJANsASALANgCSALDN/SRhm/tJwjb3k4Rt7icJ29xPEra5nyRscz9J2OZ+krDN/SRhmxdGErZ5YSRhmxdGErZ5IEnY5oEkYZsHkoRtHkgStnkgSdjmRSEJ2/x7SMI2z00StvnXkIRt/iucPXv2Vq666qqrrvqfjspVV1111f9iL/ZiL/baAHfddRdXvXCSuOo/hiSuuup/q+uuuw4ASTw3STw3STw/knh+JPEvkcR/BUm8ILZ5IEk8kG0eSBL3s839JAFgm/tJAsA295MEgG3uJwkA2wBIAsA295OEbe4nCdvcTxK2uZ8kbHM/SdjmfpKwzf0kYZv7ScI295OEbe4nCdvcTxK2uZ8kbHM/SdjmgSRhm/tJwjYPJAnb3E8StnkgSdjmgSRhm/8okrDNA0nCNi8KSdjmP4skbPMfQRK2eVFtbW0BcN99993KVVddddVV/9NRueqqq676P+Cnf/qnkcR/BEn8R5HEfwRJ/EeRxH8kSfxHksR/Bkn8Z5HEfzZJ/FeTxP9Ukrjq3+Y93/M9eW6SeG6SeG6SeH4k8YJI4kUlif9otnl+JPFAtnkgSTyQbe4nCQDb3E8S97MNgCTuZxsASQDY5n6SALANgCQAbAMgCQDbAEgCwDYAkgCwDYAkbHM/SdjmfpKwzf0kYZv7ScI295OEbe4nCdvcTxK2uZ8kbHM/SdjmhZGEbV4YSdjmgSRhmxdGErZ5IEnY5oEkYZt/K0nY5kUhCds8N0nY5rlJwjb/ESRhm38NSdjmftdddx0A//AP//DbXHXVVVdd9b8BwVVXXXXV/1L33Xffrf/wD//w2wA33HADtrHNv5dtbPMfwTa2+feyjW1s8+9lG9vY5j+CbWxjm/8ItrGNbf4j2cY2tvmPZhvb2OY/i21sYxvb/FewjW1sYxvb/E9hG9vYxja2sY1tbGObq/5lkpDEA0lCEg8kCUk8kCQkIYkHkoQkJCGJ50cSkpCEJCQhif8MkpCEJCQhCUk8N0lIQhKSeG6SkIQk7icJSUjigSQhiQeSxANJQhIPJIkHksQDSeKBJPFAkrifJCRxP0lI4n6SeCBJPJAkHkgSDySJB5LEA0nigSTxQJJ4bpJ4IEk8N0n8SyTx3CTx3CTx3CTx3CTx3CTxopLEfwdJ/GfZ2toC4L777ruVq6666qqr/jegctVVV131f8DOzg533XUXALYBkMS/h23uJ4l/D9sASOLfyzYAkvj3sg2AJP4j2AZAEv8RbHM/SfxHsc39JPEfyTYPJIn/DLZ5IEn8V7DN8yOJ/2ls86KQxP9HknggSTyQJJ6bJJ4fSbwgknhRSOI/i22emySem23uJ4kHss39JAFgm/tJAsA295MEgG0AJAFgm/tJAsA2AJIAsA2AJABsAyAJANsASMI295OEbe4nCdvcTxK2AZAEgG0AJGGb+0nCNveThG3uJwnb3E8StrmfJGxzP0nY5n6SsM0DScI295OEbV4YSdjmgSRhm/9qkrDNi0IStnlukrDNi0oStvmPIAnb/Eu2trYAuO+++27lqquuuuqq/w0Irrrqqqv+F/v7v//73wbY3t7mudnGNv8RbGObfy/b2OY/gm1s8x/BNraxzX8E29jGNv9RbGMb2/xHso1tbPOfwTa2sc1/JtvYxja2sc1/JdvYxja2sY1t/jewjW1sYxvb2MY2trGNbWxjG9vY5v8KSUjifpKQxANJQhIPJAlJSOKBJCEJSUjiuUlCEpKQhCQk8Z9JEpKQhCQkIYnnJglJSOK5SUISkrifJCQhiftJQhKSuJ8kJHE/SUjigSTxQJJ4IEk8kCTuJwlJ3E8SkrifJB5IEg8kiftJ4oEk8UCSeCBJPJAkHkgSDySJB5LEv0QSDySJ5yaJf4kknpsknpsknpsknpskXlSS+PeSxH8USfx7bG9vA3D27NlncNVVV1111f8GVK666qqr/hf7h3/4h98BuOGGG3hBbAMgiX8v2wBI4t/DNveTxL+Hbe4niX8v2wBI4j+Cbe4nif8ItrmfJP6j2OaBJPEfyTYPJIn/TLZ5IEn8V7PN8yOJ/+1s87+ZJB5IEs9NEs9NEs9NEi+IJP4lkvjPZpvnJokHss39JPFAtrmfJABscz9JANjmfpIAsA2AJABsAyAJANsASALANgCSALANgCQAbAMgCdvcTxK2uZ8kbAMgCdvcTxK2uZ8kbAMgCdvcTxK2uZ8kbHM/SdjmfpKwzf0kYZv7ScI295OEbe4nCds8kCRscz9J2OaFkYRtHkgStvmPIgnbPJAkbPOikIRtnpskbPOikoRtnpskbPMfQRK2AbjuuusA+Id/+Iff5qqrrrrqqv8NqFx11VVX/S929uzZWwF2dnb4l9gGQBL/XrYBkMS/l20AJPHvZRsASfx72eZ+kviPYBsASfxHsc39JPEfyTb3k8R/NNs8kCT+M9nmuUniv4NtXhBJXPVfRxLPTRIPJInnJonnRxIvjCT+tSTxL7HNCyOJ58c295PEA9nmfpK4n20AJHE/2wBIAsA295MEgG0AJAFgGwBJANgGQBIAtgGQBIBtACRhGwBJANgGQBK2uZ8kbAMgCQDbAEjCNveThG0AJAFgGwBJ2OZ+krDN/SRhm/tJwjb3k4Rt7icJ29xPEra5nyRs88JIwjb3k4RtHkgStnlhJGGbB5KEbR5IErb5t5KEbf49JGGb/0ySsM0Ls7W1BcB99913K1ddddVVV/1vQHDVVVdd9b/Yfffdd+t999136/b2Ntvb27wobGMb2/x72cY2/xFsY5v/CLaxjW3+I9jGNrb5j2Ab29jmP5JtbGOb/2i2sY1t/rPYxja2sc1/BdvYxja2sc1/N9vYxja2sY1tbGObq/7jSOKBJCGJ+0lCEg8kCUk8kCQkIYkHkoQkJCEJSTw3SUhCEpKQhCQkIQlJvCgkIQlJSEISkpCEJCTx/EhCEpKQxANJQhKSeCBJSOKBJCGJ+0lCEpK4nyQkcT9JSOJ+knggSTyQJO4nCUncTxL3k4Qk7ieJB5LE/STxQJJ4IEncTxIPJIkHksQDSeLfQxIPJIl/iST+JZJ4bpJ4bpJ4bpJ4bpJ4bpJ4UUniv4Mkrrrqqquu+n+D4Kqrrrrqf7mzZ8/eCrC9vc2/lm1s8+9lG9v8R7CNbf6j2MY2/1FsY5v/KLaxjW3+I9nGNrb5j2Yb29jGNv9ZbGMb29jmv4ptbGMb29jmfxLb2MY2trGNbWxjG9tc9S+TxP0kIYn7SUISDyQJSdxPEpKQxANJQhKSeG6SkIQkJCGJF0QSkpCEJCQhCUlIQhKSkIQkJCEJSUji+ZGEJCQhCUlI4oEkIQlJPJAkJCGJ+0lCEpK4nyQk8UCSkMT9JCGJ+0nifpKQxP0kIYn7SeKBJHE/STyQJO4niQeSxP0k8UCSeCBJ3E8SDySJB5LECyKJB5LEA0niuUnigSTxQJJ4bpJ4IEk8N0n8Z5PEc5PEi0oSz48knh9JPD+S+I8iiYc//OEA/MM//MNvc9VVV1111f8WBFddddVV/8v9/d///W8D3Hjjjfxb2cY2/162sY1t/r1sYxvb/EewjW3+o9jGNrb5j2Ib29jmP5JtbGOb/wy2sY1tbPOfxTa2sY1tbPNfxTa2sY1tbGOb/6lsYxvb2MY2trGNbWxjG9v8fyYJSdxPEpK4nyQkIYn7SUISDyQJSUjigSQhCUlI4rlJQhKSkIQkJCGJfy9JSEISkpCEJCTx3CQhCUlI4n6SkIQkJHE/SUhCEveThCTuJwlJPJAkHkgS95OEJO4nCUncTxL3k4Qk7ieJ+0lCEveTxP0kIYn7SeJ+kpDE/STxQJK4nyQeSBIPJIn7SeKBJPFAknggSfxLJPFAkviXSOJfIonnJonnJonnJol/D0n8b3PffffdylVXXXXVVf9bULnqqquu+l/uH/7hH34H4IYbbuDfyzYAkvj3sg2AJP69bAMgiX8v29xPEv8RbHM/SfxHsM39JPEfxTYPJIn/aLa5nyT+M9nmgSTxX8k2z48k/rewzb+FJP43k8T9JPFAknhuknggSTw/knh+JPEvkcR/NNs8N0k8N9vcTxL3s839JAFgm/tJAsA2AJIAsA2AJABsAyAJANsASALANgCSALANgCRsAyAJANsASMI2AJIAsA2AJGwDIAnb3E8StgGQhG3uJwnbAEjCNveThG0AJGGb+0nCNveThG0AJGGb+0nCNveThG3uJwnb3E8StnlhJGGb+0nCNi+MJGzzQJKwzX8USdjmgSRhmxeFJGzzopKEbZ6bJGzz3CRhm+cmCds8P9dffz0A//AP//A7XHXVVVdd9b8Flauuuuqq/+XOnj17K8DOzg62kcS/l20AJPHvZRsASfx72eZ+kvj3ss39JPEfwTYAkviPYpv7SeI/km3uJ4n/aLZ5IEn8Z7LNc5PEfzXbPD+S+L/CNv8XSOJ+knggSTw3STw3STw3Sbwgkvi3ksQD2eaFkcQLYpv7SeKBbAMgifvZBkAS97MNgCQAbAMgifvZRhIAtgGQBIBtACQBYBsASdgGQBIAtgGQhG0AJAFgGwBJ2AZAErYBkASAbQAkYRsASdjmfpKwDYAkbHM/SdgGQBK2uZ8kbPP8SMI295OEbe4nCdvcTxK2uZ8kbHM/SdjmhZGEbe4nCds8kCRs88JIwjYPJAnbPJAkbPNvJQnbvCgkYZurrrrqqquuehFRueqqq676P2J7exsA2wBI4t/LNgCS+PeyDYAk/iPYBkAS/xFsAyCJ/wi2uZ8k/qPY5n6S+I9km/tJ4j+DbR5IEv/ZbPNAkvjvYpsXRBJX/deRxANJ4n6SeG6SeCBJPDdJPD+SeGEk8W8liReVbR5IEg9km/tJ4n62AZDE/WwDIAkA2wBI4n62AZAEgG0kAWAbAEkA2AZAErYBkASAbQAkYRsASdjmfpKwDYAkbAMgCdvcTxK2AZCEbQAkYZv7ScI2AJKwzf0kYRsASdjmfpKwDYAkbHM/SdjmfpKwzf0kYZv7ScI295OEbe4nCdvcTxK2eWEkYZsXRhK2eSBJ2OaBJGGbB5KEbR5IErZ5IEnY5kUhCdv8T3HdddcB8A//8A+/zVVXXXXVVf9bEFx11VVX/S9333333foP//APvw1w4403cj/b2MY2/162sc1/BNvYxjb/EWxjm/8otrGNbf6j2MY2tvmPZBvb2OY/mm1sYxvb/GexjW1sY5v/CraxjW1sY5v/CWxjG9vYxja2sY1trvrPIQlJAEhCEveThCQkcT9JSOJ+kpCEJO4nCUlIQhIPJAlJSEISknh+JCEJSUhCEpKQhCQkIQlJSEISkpCEJJ4fSUhCEpKQxANJQhKSkMT9JCEJSdxPEpKQBIAkJCGJ+0lCEveTxP0kIYn7SeJ+kpDE/SRxP0ncTxKSuJ8k7ieJ+0lCEveTxP0kcT9JSOJ+krifJB5IEveTxANJ4n6SeCBJPJAk/jUk8UCSeCBJPJAknpskHkgSz00S/x0k8aKSxPMjiedHEs+PJJ4fSTw/W1tbANx33323ctVVV1111f8WVK666qqr/g/Z3t7m+bENgCT+PWxzP0n8e9kGQBL/Xra5nyT+I9gGQBL/UWxzP0n8R7HN/STxH80295PEfxbbPJAk/ivY5vmRxP8UtvmXSOKqF40kHkgS95PEA0niuUnigSTx/EjiBZHEfxZJvCC2uZ8kHsg295PE/WwDIIn72QZAEgC2AZAEgG0AJAFgG0kA2AZAEgC2kQSAbQAkYRsASQDYRhIAtgGQhG0AJGEbAEkA2AZAErYBkIRtACRhm/tJwjYAkrANgCRscz9J2AZAEra5nyRsAyAJ29xPErZ5fiRhm/tJwjb/GpKwzf0kYZsXRhK2eWEkYZsHkoRtHkgStnkgSdjmgSRhmxeFJGzz321rawuA++6771auuuqqq67634Tgqquuuur/gL//+7//bYDt7W1eGNvY5j+CbWzzH8E2tvmPYhvb/EexjW1s8x/JNraxzX8k29jGNv8ZbGMb29jmP5NtbGMb2/xXs41tbGMb2/xPZhvb2MY2trGNbWxjG9tc9WySkASAJCRxP0lI4n6SkIQk7icJSdxPEpKQhCTuJwlJSEISknhukpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSOKBJCEJSUhCEveThCQkIYn7SUISkrifJCRxP0lI4n6SkMT9JCEJAElI4n6SuJ8kJAEgCUncTxL3k8T9JHE/SUjifpK4nyTuJ4n7SeKBJHE/SdxPEg8kiftJ4gWRxANJ4n6SeCBJPJAkHkgSDySJf4kkHkgS/xJJPDdJ/GeTxItKEs+PJP4zXHfddQD8wz/8w29z1VVXXXXV/yYEV1111VX/B/zDP/zD7wDceOONvChsY5v/CLaxzX8E29jGNv8RbGMb2/xHsY1tbPMfyTa2+Y9mG9vYxjb/GWxjG9vY5j+TbWxjG9vY5r+abWxjG9vYxjb/m9jGNraxjW1sYxvb2MY2trGNbWzzf4kkJHE/SdxPEpK4nyQkcT9JSEIS95OEJB5IEpKQxANJQhKSkIQkJPHcJCEJSUhCEpKQhCQkIQlJSEISknh+JCEJSUhCEg8kCUlIQhL3k4QkJHE/SUjifpKQxP0kIYn7SUIS95PE/SQhCQBJSOJ+krifJO4niftJQhIAkpDE/SRxP0ncTxL3k8T9JPFAkrifJO4niQeSxP0kcT9JPJAkHkgS95PEA0nigSTxQJJ4IEk8kCT+JZJ4IEk8N0n8SyTx3CTx3CTx3CTxopLEv5cknh9JPD+SuOqqq6666v8EKlddddVV/wecPXv2VoCdnR3+NWwDIIl/L9sASOI/gm0AJPEfwTYAkviPYhsASfxHsc39JPEfzTb3k8R/BtvcTxL/2WzzQJL472Cb50cS/1fY5v8aSdxPEg8kiQeSxANJ4rlJ4rlJ4gWRxH80SbwwtgGQxHOzDYAk7mcbAEnczzaSuJ9tJHE/20gCwDYAkgCwjSQAbAMgCdsASALANpIAsI0kAGwjCQDbAEjCNgCSsA2AJGwDIAnbAEjCNgCSsA2AJABsAyAJ2wBIwjYAkrDN8yMJ2wBIwjb3k4Rtnh9J2OZ+krDN/SRhm/tJwjb3k4Rt7icJ29xPErZ5YSRhmxdGErZ5IEnY5j+KJGzzP811110HwD/8wz/8DlddddVVV/1vQnDVVVdd9X/Afffdd+t999136/b2Ntvb2/xr2cY2/xFsYxvb/EewjW3+o9jGNrb5j2Ib29jmP5JtbGOb/wy2sY1t/rPYxja2sc1/BdvYxja2sc1/J9vYxja2sY1tbHPVfx9JSOJ+krifJCRxP0lI4n6SkMT9JCEJSQBIQhKSkMT9JCEJSUhCEs9NEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJPHcJCEJSUjigSQhCUncTxKSkMT9JCGJ+0lCEveThCQAJCGJ+0lCEgCSkASAJCRxP0ncTxL3k8T9JHE/SdxPEveTxP0kcT9J3E8SDySJ+0nifpK4nyTuJ4kHksT9JPFAkrifJB5IEg8kiX8PSTyQJB5IEv8SSfxbSOK5SeK5SeJFJYnnJonnRxLPjyT+rba2tgC47777buWqq6666qr/TQiuuuqqq/6POHv27K0AOzs7/FvZxjb/UWxjm/8ItrGNbf6j2MY2/5FsYxvb/EeyjW1s85/BNraxjW3+s9jGNraxzX8V29jGNraxzf8EtrGNbWxjG9vYxjZX/eeThCQAJCGJ+0lCEgCSkIQkACQhCUncTxKSuJ8kJCEJSTyQJCQhCUlIQhLPjyQkIQlJSEISkpCEJCQhiedHEpKQhCQkIYn7SUISkpDE/SQhCUncTxKSkASAJCQhCQBJSOJ+kpAEgCQkcT9J3E8S95PE/SQhCQBJSAJAEveTxP0kcT9J3E8SkgCQhCQAJCEJAElI4n6SuJ8k7ieJ+0nifpJ4IEncTxIPJIn7SeKBJPGCSOKBJPFAkvjXksQDSeJfIonnJonnJokXhSSemyT+K0ni+ZHE/ba2tgA4e/bsrVx11VVXXfW/CcFVV1111f8Rf//3f//bADfccAP/XraxjW3+I9jGNv9RbGOb/yi2sY1t/iPZxja2+Y9kG9vYxjb/GWxjG9v8Z7KNbWxjm/9KtrGNbWxjm/9pbGMb29jGNraxjW2u+reThCQAJCGJ+0lCEgCSkMT9JCGJ+0lCEpIAkIQkJPFAkpCEJCTxQJKQhCQkIQlJSEIS/xqSkIQkJCEJSUhCEg8kCUlIQhL3k4QkJCEJAElIQhL3k4Qk7icJSQBIQhL3k4QkACQhCQBJSAJAEpIAkIQk7ieJ+0kCQBKSAJCEJAAkIQkASUjifpK4nyTuJ4n7SeJ+krifJO4niftJ4n6SeCBJ3E8SL4gkXhBJPJAkHkgSDySJB5LEA0niXyKJB5LEc5PEv4Uk/qNJ4vmRxH+kra0tAO67775bueqqq6666n8Tgquuuuqq/yP+4R/+4XcAbrzxRmzzH8U2tvmPYBvb2OY/gm1sY5v/KLaxjW3+I9nGNrb5j2Yb29jmP4NtbGMb2/xnso1tbGOb/2q2sY1tbGMb2/xPZRvb2MY2trGNbWxjG9vY5qrnTxL3k4QkACQhiftJQhIAkpCEJAAkIQlJ3E8SkpCEJO4nCUlIQhKSeCBJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQxANJQhKSkIQk7icJSUhCEveThCTuJwlJSAJAEpK4nyQkASAJSdxPEveThCQAJCEJAElIAkAS95PE/SRxP0ncTxL3k8T9JHE/SdxPEveTxP0kcT9J3E8S95PE/SRxP0k8kCTuJ4n7SeKBJHE/STyQJB5IEg8kiQeSxANJ4oEk8UCS+JdI4l8iiecmiecmiecmiecmiecmiX8vSfxrXXfddQD8wz/8w+9w1VVXXXXV/zZUrrrqqqv+jzh79uytANvb2wDY5n6S+PeyDYAk/iPYBkAS/xFsAyCJ/yi2AZDEfyTb3E8S/5Fscz9J/Gewzf0k8Z/JNs9NEv/VbPP8SOJ/C9v8a0ji/zJJ3E8S95PEA0nifpJ4IEk8kCSemySeH0m8KCTxr2WbB5LE82MbAEk8kG0AJHE/20jifrYBkASAbSQBYBsASQDYRhIAtpEEgG0AJGEbAEnYBkAStpEEgG0kAWAbSQDYRhK2AZCEbQAkYRsASdgGQBK2AZCEbQAkYRsASdgGQBK2AZCEbQAkYRsASdgGQBK2eX4kYRsASdjmfpKwDYAkbHM/SdjmP4skbHM/SdjmhZGEbR5IErb5ryYJ2zw3SdjmRSEJ2zw3SWxtbQFw33333cpVV1111VX/21C56qqrrvo/Zmdnh+dmGwBJ/HvZBkAS/xFsAyCJ/wi2uZ8k/iPY5n6S+I9kGwBJ/Eezzf0k8Z/BNg8kif9stnkgSfx3sc3zI4n/7Wzzn0US/5ls86KSxP0kcT9J3E8SDySJB5LEA0niuUni+ZHEfzRJvDC2AZDEA9kGQBL3sw2AJABsAyCJ+9lGEgC2kcT9bCMJANtIAsA2kgCwjSQAbCMJANtIwjYAkrANgCRsAyAJ20gCwDaSsA2AJGwDIAnbAEjCNgCSsA2AJGwDIAnbAEjCNgCSsA2AJGwDIAnbAEjCNgCSsM39JGEbAEnY5vmRhG3uJwnbAEjCNveThG3uJwnb3E8StrmfJGzzwkjCNveThG3+tSRhmweShG0eSBK2eSBJ2OaBJGGb/0pbW1sA3HfffU/nqquuuuqq/20Irrrqqqv+j7jvvvtu/Yd/+IffBrjxxht5fmxjm/8ItrGNbf4j2MY2tvmPYhvb/EeyjW1s8x/JNraxzX8G29jGNrb5z2Ib29jGNv8VbGMb29jGNv/dbGMb29jGNra56grb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sY5sXhSQkASAJSQBIQhIAkpAEgCQkIQkASUhCEgCSkIQk7icJSUjifpKQhCQk8UCSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlI4oEkIQlJSOJ+kpCEJCQBIAlJSAJAEpKQxP0kIQkASUjifpK4nyQkASAJSQBI4n6SuJ8kACQhCQBJSAJAEveTxP0kASAJSQBI4n6SuJ8k7ieJ+0nifpK4nyTuJ4n7SeJ+krifJO4niRdEEveTxANJ4gWRxANJ4oEk8UCSeCBJPJAk/iWSeCBJPDdJ/HeQxItKEs+PJJ6fra0tAM6ePfsMrrrqqquu+t+GylVXXXXV/0Hb29u8MLYBkMR/BNsASOI/gm0AJPEfwTb3k8R/FNvcTxL/UWxzP0n8Z7DN/STxn8U2DySJ/wq2eW6S+O9mmxdGElf915HE/SRxP0ncTxIPJIkHksQDSeKBJPH8SOKFkcR/BNsASOL5sY0kHsg2AJK4n20kcT/bSALANgCSALCNJABsIwkA2wBIwjYAkrCNJABsIwkA20gCwDaSsA2AJGwjCQDbSMI2AJKwDYAkbCMJANtIwjYAkrANgCRsAyAJ2wBIwjYAkrANgCRsAyAJ2wBIwjYAkrANgCRsAyAJ29xPErYBkIRt7icJ2wBIwjb3k4Rt7icJ29xPEra5nyRscz9J2OZ+krDN/SRhmxdGErZ5YSRhmweShG0eSBK2eSBJ2OaBJGGbF4UkbPPvcd111wHwD//wD7/NVVddddVV/9sQXHXVVVf9H/L3f//3vw2ws7PDi8I2tvmPYhvb/EexjW1s8x/FNraxzX8k29jmP5ptbGMb2/xnsI1tbPOfzTa2sY1t/ivZxja2sY1t/qexjW1sYxvb2MY2trnqP44k7ieJ+0nifpK4nyQkASAJSUgCQBKSkASAJCQhiftJQhKSkASAJCQhCUlIQhKSeCBJSEISkpCEJCQhCUlIQhLPTRKSkIQkJCGJ+0lCEpKQBIAkJCGJ+0lCEpIAkIQkACQhCUkASEISAJKQBIAkJAEgCUkASEISAJKQBIAk7icJAElIAkAS95MEgCQkASCJ+0nifpIAkMT9JHE/SdxPEveTxP0kcT9J3E8S95PE/SRxP0ncTxIviCReEEk8kCT+M0nigSTxL5HEc5PE/ySSeFFtbW1x1VVXXXXV/1pUrrrqqqv+D/mHf/iH3wG48cYb+dewDYAk/iPYBkAS/1FsAyCJ/yi2AZDEfxTb3E8S/9Fscz9J/EezzQNJ4j+TbR5IEv+VbPPcJPE/lW1eFJK46l8miftJ4n6SuJ8k7ieJB5LE/STxQJJ4bpJ4fiTxH0USL4xtACTxQLYBkMT9bCOJ+9kGQBIAtpEEgG0AJAFgG0kA2EYSALaRBIBtJAFgG0nYBkAStpEEgG0kYRsASdhGEgC2kYRtACRhG0nYBkAStgGQhG0kYRsASdgGQBK2AZCEbQAkYRsASdgGQBK2eW6SsA2AJGwDIAnbAEjCNgCSsM39JGEbAEnY5n6SsM3zIwnb3E8StrmfJGxzP0nY5n6SsM0LIwnb3E8StvnXkoRtHkgStnkgSdjmgSRhmweShG2emyRs86KQhG2en/vuu+9Wrrrqqquu+t+GylVXXXXV/yFnz569FWB7e5t/C9vcTxL/Xra5nyT+I9gGQBL/UWxzP0n8R7HN/STxH80295PEfwbbPJAk/jPZ5oEk8V/NNs+PJP63sM2LShL/H0kCQBL3k8T9JHE/SdxPEg8kiQeSxANJ4rlJ4gWRxH8G2wBI4rnZRhIPZBtJ3M82krifbSQBYBtJ3M82kgCwjSQAbCMJANtIwjYAkrCNJABsIwnbAEjCNpIAsI0kbAMgCdtIwjYAkrCNJABsIwnbAEjCNpKwDYAkbAMgCdsASMI2AJKwDYAkbPNAkrDNv0QStgGQhG0AJGGb50cStnl+JGGb+0nCNveThG3uJwnb3E8StrmfJGxzP0nY5oWRhG3uJwnbPJAkbPO/ycMf/nAA/uEf/uG3ueqqq6666n8jKlddddVV/4fcd999twLs7Oywvb3N/v4+/1a2AZDEfwTbAEjiP4Jt7ieJ/yi2uZ8k/qPY5n6S+I9mm/tJ4j+Lbe4nif9stnlukvjvYJvnRxL/m9nm30sS/xtJAkAS95PE/SRxP0k8kCTuJ4kHksQDSeK5SeKFkcR/BNsASOK52QZAEg9kG0nczzaSuJ9tJAFgG0nczzaSALCNJABsIwkA20jCNpIAsI0kAGwjCdtIAsA2krANgCRsIwnbAEjCNpIAsI0kbAMgCdtIwjYAkrCNJABsIwnbAEjCNgCSsA2AJGzzQJKwDYAkbAMgCdsASMI2z48kbAMgCdsASMI295OEbQAkYZv7ScI295OEbf6jSMI295OEbV4YSdjmhZGEbR5IErZ5IEnY5oEkYZsHkoRtXhSSsM2L4r777ruVq6666qqr/jciuOqqq676P+Yf/uEffhtgZ2eH/wi2sc1/FNvYxjb/UWxjm/9otrHNfzTb2MY2/xlsYxvb/GeyjW1sY5v/KraxjW1s89/NNraxjW1sYxvb/H9hG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2OZ+kgCQxP0kcT9JAEhCEgCSkIQkACQhCQBJSEISAJKQhCQAJCEJSUjifpKQhCQkIQlJPJAkJCEJSUhCEpKQhCQkIQlJPJAkJCEJSUhCEgCSkIQkJHE/SUhCEgCSkIQkACQhCQBJSEISAJKQBIAkJAEgiftJAkASkgCQhCQAJAEgCUkASAJAEpIAkASAJCQBIIn7SQJAEveTBIAk7ieJ+0kCQBL3k8T9JHE/SQBI4n6SuJ8k7ieJ+0nifpJ4IEncTxL3k8QLIokHksQLIokHksQDSeKBJPGvJYl/iST+O0jiRSWJ+1177bUA3Hfffbdy1VVXXXXV/0YEV1111VX/x/z93//9bwPccMMN/EeyjW3+I9nGNv9RbGMb2/xHso1tbPMfzTa2sc1/BtvYxja2+c9kG9vYxjb/VWxjG9vYxjb/U9jGNraxjW1sY5ur/ntJQhIAkpAEgCQkASAJAElIAkASkpAEgCQkASAJSUgCQBKSkMT9JCEJSUgCQBKSkIQkJCEJSUjiX0sSkpCEJCQhCUncTxKSkIQkACQhCUlIAkASkpAEgCQkASAJSUgCQBKSAJCEJAAkASAJSQBIQhIAkrifJAAkIQkASQBIQhIAkgCQxP0kASCJ+0kCQBL3kwSAJO4niftJAkAS95PE/SRxP0kASOJ+krifJO4niftJ4n6SeEEkcT9J3E8SDySJF0QSDySJB5LEA0nigSTxQJJ4IEn8SyTxL5HEc5PEc5PEc5PEc5PEi0oSL4qzZ88+g6uuuuqqq/43Irjqqquu+j/mH/7hH34H4KabbsI2tvmPZBvb2OY/im1s8x/JNraxzX8k29jGNv/RbGMb2/xnsY1tbPOfzTa2sY1t/ivZxja2sY1t/qexjW1sYxvb2MY2trnqv4YkACQhCQBJSAJAEgCSkASAJCQhCQBJSAJAEpKQBIAkJCEJSQBIQhKSkMT9JCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkACQhCUlIQhIAkpCEJCQBIAlJSAJAEpIAkIQkJAEgCUkASEISAJIAkIQkACQhCQBJAEhCEgCSuJ8kACRxP0kASAJAEpIAkASAJCQBIAkASdxPEgCSuJ8k7icJAEncTxL3k8Rzk8T9JHE/SdxPEveTxP0kcT9JvCCSuJ8kHkgS95PEA0nigSTxH0kSDySJf4kknpsk/rNJ4l/ruuuuA+Af/uEffpurrrrqqqv+N6Jy1VVXXfV/1Pb2Nvezzf0k8R/FNgCS+I9gm/tJ4j+KbQAk8R/JNveTxH8k29xPEv8ZbPNAkvjPZJsHksR/Jds8P5L4n8g2L4wkrvq3k8T9JAEgiftJ4n6SAJDE/STxQJK4nyQeSBLPTRIviCT+I9kGQBLPzTaSeCDbSOJ+tpEEgG0kcT/bSALANpIAsI0kbCMJANtIAsA2krCNJABsIwnbSALANpKwjSQAbCMJ20gCwDaSsI0kbAMgCdtIwjaSALCNJGwjCQDbSMI2AJKwjSRsAyAJ2wBIwjaSsA2AJGwDIAnbAEjCNgCSsA2AJGwDIAnbAEjCNgCSsM3zIwnbPD+SsM39JGGb50cStrmfJGxzP0nY5n6SsM0LIwnb3E8StvnXkoRtHkgStnkgSdjmgSRhm38rSdhma2sLgPvuu+9Wrrrqqquu+t+IylVXXXXV/zFnz569lRfCNgCS+I9iGwBJ/EexDYAk/qPY5n6S+I9km/tJ4j+Sbe4nif8strmfJP6z2eaBJPHfwTbPTRL/09nmRSWJq56XJO4nCQBJ3E8S95MEgCTuJ4kHksT9JPFAknhuknhhJPHvYRsASTw/tpHEA9lGEvezjSSeH9tIAsA2kgCwjSQeyDaSALCNJGwjCQDbSMI2kgCwjSRsIwkA20jCNpKwDYAkbCMJ20jCNgCSsI0kbAMgCdtIwjYAkrCNJGwDIAnbSMI2AJKwDYAkbCMJ2wBIwjYAkrANgCRsAyAJ2wBIwjYAkrANgCRsAyAJ2wBIwjb3k4RtACRhm/tJwjbPjyRscz9J2OZ+krDN/SRhm/tJwjb3k4RtXhhJ2OZ+krDNA0nCNv+ZJGGbB5KEbZ7b1tYWV1111VVX/a9HcNVVV131f8x999136z/8wz/89s7ODjfeeCMviG1s8x/JNraxzX8U29jGNv+RbGMb2/xHs41t/jPYxja2sc1/FtvYxja2+a9gG9vYxja2+e9iG9vYxja2sc3/VraxjW1sYxvb2MY2trGNbWxjm//rJAEgCUkASAJAEpIAkIQkJCEJAElIAkASkpAEgCQkASAJSUgCQBKSkIQk7icJSUhCEpKQxP0kIQlJSEISkpCEJCQhCUlI4n6SkIQkJCEJSUgCQBKSkIQkACQhCUkASEISkgCQhCQAJCEJAElIAkASkgCQBIAkJAEgCUlIQhIAkgCQhCQAJAEgCUkASAJAEgCSkASAJAAkASAJSQBIAkAS95MEgCTuJwkASdxPEgCSuJ8k7icJAEncTxL3k8T9JPGvIYn7SeJ+knhBJPGCSOKBJPFAkvj3kMQDSeJfIol/iSSemyReFJL497juuusA+K3f+q3v5qqrrrrqqv+tqFx11VVX/R+2s7PDnXfeyQtjGwBJ/EeyDYAk/qPYBkAS/5FsAyCJ/0i2uZ8k/jPY5n6S+M9imweSxH8F2zyQJP472eb5kcT/Nbb5ryKJfwvb/HtIAkASAJK4nyTuJwkASdxPEveTxANJ4n6SeCBJPD+SeFFJ4oFs80CSeEFsAyCJB7KNJO5nG0nczzaSALCNJABsIwkA20gCwDaSeCDbSALANpKwjSRsIwkA20jCNpIAsI0kbCMJ20gCwDaSsI0kbCMJ2wBIwjaSsI0kbAMgCdtIwjYAkrCNJGwDIAnbSMI2AJKwzQNJwjYAkrANgCRs80CSsA2AJGwDIAnbPD+SsA2AJGwDIAnb3E8StgGQhG3uJwnbvCgkYZv7ScI295OEbf41JGGbF0YStvnXkoRt/q0kYZurrrrqqqv+zyG46qqrrvo/6O///u9/G2B7e5sXlW1sY5v/SLaxjW3+o9jGNrb5j2Qb29jmP5ptbGOb/yy2sY1t/rPZxja2sc1/FdvYxja2sc3/BLaxjW1sYxvb2Oaqf5ltbGMb29jGNraxjW1sYxvb2MY2/x6SAJAEgCQAJCEJAElIQhKSAJCEJAAkIQkASUhCEpKQhCQAJCEJSQBIQhKSkIQkACQhCUlIQhKSkIQkJCGJ5yYJSUhCEpKQhCQkIQlJAEhCEpKQhCQAJCEJSQBIQhKSAJCEJAAkIQlJSEISAJKQBIAkJAEgCQBJSAJAEgCSkIQkJAEgCQBJSAJAEgCSAJDE/SQBIAkASQBIQhIAkgCQBIAk7icJAEncTxIAknhukrifJAAkcT9J3E8Sz00S95PE/SRxP0ncTxIviCTuJ4kXRBIviCQeSBIPJIkHksQDSeKBJPFAkviXSOJfIonnJol/K0m8KK677joA/uEf/uF3uOqqq6666n8rgquuuuqq/4P+4R/+4XcAbrrpJv4tbGOb/2i2sc1/JNvY5j+abWxjm/9otrGNbf6z2MY2trHNfzbb2MY2tvmvZBvb2MY2tvmfxDa2sY1tbGMb21z130cSkpCEJAAkASAJSQBIAkASkgCQhCQAJCEJAElIAkASkpAEgCQkIQkASUhCEpKQBIAkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhIAkpCEJCQhCQBJSEISkpCEJCQBIAlJSEISkpAEgCQkIQlJAEhCEgCSkIQkJAEgCQBJSAJAEgCSAJCEJAAkASAJAEkASEISAJIAkASAJO4nCQBJAEgCQBL3kwSAJO4nCQBJAEjifpK4nyQAJHE/SdxPEgCSuJ8k7ieJ+0nifpK4nyTuJ4kXRBL3k8QLIokHksQDSeI/kiQeSBL/Ekn8W0jiuUni32pzc5Orrrrqqqv+16Ny1VVXXfV/0NmzZ28F2N7e5t/DNgCS+I9kGwBJ/Eexzf0k8R/JNveTxH8k29xPEv9ZbHM/Sfxns80DSeK/km2emyT+p7HNCyOJq/7zSAJAEveTBIAkACRxP0ncTxL3k8T9JHE/STyQJB5IEi+IJP4j2AZAEs/NNpJ4INtI4vmxjSQAbCMJANtI4oFsIwkA20jCNpJ4INtIwjaSeCDbSMI2krCNJGwjCQDbSMI2krCNJGwjCdsASMI2krCNJGwjCdsASMI2krANgCRsIwnbSMI2AJKwDYAkbCMJ2wBIwjYPJAnbAEjCNgCSsA2AJGwDIAnbAEjCNgCSsA2AJGzz/EjCNgCSsM39JGGb+0nCNs+PJGxzP0nY5n6SsM39JGGbfw1J2OaFkYRtHkgStvm3kIRtHkgStrnf1tYWAP/wD//w21x11VVXXfW/FZWrrrrqqv+D7rvvvlsBdnZ22NnZYW9vj38P2wBI4j+Sbe4nif8otrmfJP4j2QZAEv/RbPNAkvjPYJsHksR/Nts8kCT+q9nmuUnifzLbvCgkcdW/jiQAJAEgCQBJ3E8SAJK4nyQAJHE/SdxPEg8kiQeSxHOTxAsiiX8r20ji+bGNJB7INpK4n20kAWAbSQDYRhIAtpEEgG0k8UC2kcQD2UYStpHEA9lGEraRhG0kYRtJPJBtJGEbSdhGEraRhG0kAWAbSdhGEraRhG0kYRsASdhGErZ5IEnYRhK2AZCEbR5IErYBkIRtJGEbAEnYBkAStgGQhG0AJGEbAEnYBkAStgGQhG0AJGEbAEnY5vmRhG3uJwnbPD+SsM39JGGb+0nCNveThG3uJwnb3E8StrmfJGzzwkjCNv9akrDNA0nCNv9aW1tbANx33323ctVVV1111f9WBFddddVV/0f9wz/8w28DbG1t8R/FNraxzX8029jmP5ptbPMfzTa2sc1/FtvYxjb/mWxjG9v8V7GNbWxjm/8utrGNbWxjG9v8b2Mb29jGNraxjW1sYxvb2OaqKyQhCQBJAEgCQBKSAJAEgCQkASAJAElIAkASkgCQhCQkIQlJSEISAJKQhCQkIQlJSEISkpCEJAAkIQlJSEISkpCEJCQhCUlI4n6SkIQkJCEJSQBIQhKSkASAJCQhCQBJSEISkpCEJCQhCUlIQhIAkpAEgCQkIQlJAEgCQBKSkIQkACQBIAkASQBIAkASkgCQBIAkACQBIAkASQBI4n6SAJAEgCQAJAEgiftJAkASAJK4nyQAJHE/SQBI4n6SeG6SuJ8k7ieJ/wiSuJ8k7ieJB5LECyKJB5LEfyZJPJAk/iWSeG6S+I8kCYBrr70WgPvuu+9Wrrrqqquu+t+M4Kqrrrrq/6i///u//22Am266CdvY5j+SbWzzH802trHNfyTb2MY2/9FsYxvb/GexjW1s85/JNraxjW3+q9jGNraxzX8329jGNraxjW3+L7CNbWxjG9vYxja2sY1tbGMb29jGNrb5v0QSkpCEJAAkASAJSUhCEgCSkIQkJAEgCUkASEISAJKQBIAkJCEJSUhCEpKQBIAkJCEJSUhCEpK4nyQkIQlJSEISkpDE/SQhCUlIQhKSkASAJCQhCUkASEISkgCQhCQkASAJSQBIQhIAkpCEJCQBIAlJAEgCQBKSkIQkACQBIAkASQBIAkASkpCEJAAkASAJAEkASAJAEgCSAJCEJAAkASAJAEkASAJAEveTBIAkACRxP0kASOJ+kgCQxP0kASCJ+0nifpJ4bpK4nyTuJ4n7SeJ+knhBJHE/SbwgknggSbwgknggSTyQJB5IEg8kiX8tSfxbSOK5SeK5SeIF2draAuAf/uEffpurrrrqqqv+N6Ny1VVXXfV/1D/8wz/8DsCNN97I/WxzP0n8R7ANgCT+o9kGQBL/kWxzP0n8R7LN/STxn8E295PEfybbPJAk/ivY5rlJ4r+bbZ4fSfx/YZv/CyQBIAkASQBI4n6SAJAEgCTuJwkASdxPEg8kiftJ4oEk8dwk8e8hif9otpHEC2MbSTyQbSTxQLaRhG0kYRtJvDC2kYRtJGEbSdhGEraRhG0kYRtJ2EYSALaRhG0kYRtJ2EYStpGEbSRhGwBJ2EYStpGEbQAkYRtJ2AZAEraRhG0AJGEbSdgGQBK2AZCEbSRhGwBJ2AZAErYBkIRtACRhGwBJ2AZAErZ5fiRhGwBJ2OZ+krDN8yMJ29xPErb5t5KEbe4nCdvcTxK2eWEkYZsHkoRt/iNtbW0BcN99993KVVddddVV/5tRueqqq676P25nZ4fnxzYAkviPYJv7SeI/km3uJ4n/SLYBkMR/NNvcTxL/GWzzQJL4z2SbB5LEfxXbPDdJ/E9gmxdEElf9zyQJAEkASAJAEgCSuJ8kACQBIIn7SeJ+krifJB5IEg8kiecmif8stpHEA9lGEvezjSSeH9tIAsA2kngg20jigWwjCdtI4vmxjSRsIwnbSMI2krCNJGwjCdtIwjaSsI0kbCMJ20gCwDaSsI0kbCMJ20jCNpKwjSRsIwnbAEjCNpKwjSRsAyAJ20jCNg8kCds8kCRsAyAJ2zyQJGwDIAnbAEjCNgCSsA2AJGwDIAnbAEjCNgCSsM3zIwnbPD+SsM39JGGb50cStrmfJGxzP0nY5l9DEra5nyRs868lCdv8SyRhmweSxNbWFgBnz559BlddddVVV/1vRuWqq6666v+os2fP3sqLwDYAkviPYhsASfxHsw2AJP4j2eZ+kviPZpv7SeI/i23uJ4n/bLZ5IEn8V7LNc5PE/yS2eWEkcdV/PUlIAkAS95MEgCQAJAEgiftJAkAS95PE/SRxP0ncTxIPJInnRxL/0WwjiX8N20gCwDaSALCNJABsI4kHso0kbCOJB7KNJGwjCdtIwjaSsI0kbCMJ20jCNpKwjSRsIwnbSOL5sY0kbCMJ20jCNpKwjSRsIwnbSMI2krANgCRsIwnbSMI2DyQJ20jCNgCSsI0kbAMgCds8kCRsAyAJ2wBIwjYAkrDNi0oStgGQhG0AJGGb50cStrmfJGzz/EjCNveThG3uJwnb3E8StrmfJGxzP0nY5l9DErb515KEbV4U1157LQD/8A//8NtcddVVV131vxnBVVddddX/Uffdd9+t//AP//DbOzs73HjjjfxLbGOb/0i2sY1t/qPZxja2+Y9mG9vY5j+DbWxjm/9MtrGNbWzzX8E2trGNbf472MY2trGNbf4ns41tbGMb29jGNra56j+HJAAkASAJSUhCEpKQBIAkACQhCUlIAkASkpCEJCQhCUlIQhKSkASAJCQhCQBJSEISkpAEgCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJAElIQhKSkASAJCQhCQBJSEISkpCEJCQhCUlIQhKSkIQkACQhCUlIQhKSAJAEgCQAJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIAkASAJIAkASAJAAkASAJAEkASAJAEgCSAJDEc5MEgCQAJHE/SQBI4n6SAJDE/SQBIIn7SeJ+knhhJHE/SdxPEi+IJO4niftJ4oEk8YJI4oEk8Z9JEg8kiX+JJJ6bJF4Ukrjqqquuuur/LCpXXXXVVf8P7OzscOedd/KisM39JPEfxTYAkviPZpv7SeI/km3uJ4n/aLZ5IEn8Z7HN/STxX8E2DySJ/w62eW6S+N/ANi8KSVz1ryMJAEkASAJAEgCSAJAEgCTuJwkASdxPEveTxP0kcT9JPDdJPDdJ/HeyjSSem20kAWAbSTyQbSRhG0m8MLaRhG0kYRtJ2EYStpGEbSRhG0nYRhK2kYRtJGEbSdhGEraRhG0kYRtJ2EYStpGEbSRhG0nYRhK2kYRtJGEbAEnYRhK2kYRtACRhG0nY5oEkYRsASdhGErYBkIRtHkgStgGQhG0AJGEbAEnYBkAStgGQhG2eH0nYBkAStnl+JGGb+0nCNs+PJGxzP0nY5n6SsM39JGGb+0nCNv8akrDNv5YkbPMv2draAuC+++67lauuuuqqq/43I7jqqquu+j/s7//+738bYGdnh38L29jmP5JtbGOb/wy2sc1/BtvYxjb/WWxjG9v8Z7KNbWxjm/8qtrGNbWzz38k2trGNbWxjm/+tbGMb29jGNraxjW1sYxvb2Ob/O0lIQhKSkIQkJCEJSQBIAkASAJKQhCQkASAJSUhCEpKQhCQkIQlJSAJAEpKQhCQkIQlJSEISAJKQhCQkIQlJSEISkpCEJCQhCUlIQhKSAJCEJCQhCUkASEISkgCQhCQkIQlJSAJAEpKQhCQkIQlJAEhCEpKQhCQkASAJAEkASAJAEgCSAJAEgCQAJAEgCQBJAEgCQBIAkgCQBIAkACQBIAkASQBIAkASAJIAkASAJAAkASAJAEk8N0kASOK5SQJAEveTxHOTxP0kASCJ+0nifpK4nyTuJ4n7SeJ+krifJF4QSdxPEg8kiRdEEg8kiX8PSTyQJB5IEv8SSTw3SfxrXXvttQD8wz/8w29z1VVXXXXV/3ZUrrrqqqv+D/uHf/iH3wG48cYb+fewDYAk/iPZBkAS/9Fscz9J/Eezzf0k8Z/BNveTxH8m29xPEv9VbPPcJPHfyTbPjyT+L7HNv5ck/reSBIAkACQBIAkASQBIAkAS95MEgCQAJHE/SdxPEveTxP0k8dwk8fxI4t/KNpL4z2AbSTyQbSRhG0n8R7GNJGwjCdtIwjaSsI0kbCMJ20jCNpKwjSRsIwnbSMI2krCNJGwjCdtIwjaSsI0kbCMJ20jCNgCSsI0kbCMJ2wBIwjaSsA2AJGwjCdsASMI2DyQJ2wBIwjYAkrDNi0oStgGQhG0AJGGb50cStnl+JGGb+0nCNs+PJGxzP0nY5n6SsM2/hiRscz9J2OZfSxK2eSBJ2AZga2sLgPvuu+9Wrrrqqquu+t+OylVXXXXV/2Fnz569FWBnZ4f/CLa5nyT+o9jmfpL4j2ab+0niP5pt7ieJ/wy2uZ8k/jPZ5oEk8V/JNg8kif8JbPOCSOL/I9v8byYJAEkASAJAEgCSAJAEgCQAJAEgiftJAkAS95PE/STxQJJ4IEm8IJL4j2QbSbwgtpEEgG0kAWAbSTyQbSTx/NhGEraRhG0kYRtJ2EYStpGEbSRhG0nYRhLPj20kYRtJ2EYStpGEbSRhG0nYRhK2kYRtJGEbSdhGEraRhG0kYRtJ2EYStpGEbSRhmweShG0kYRsASdhGErZ5IEnYBkAStpGEbQAkYRsASdjmgSRhGwBJ2AZAErb5l0jCNgCSsM39JGEbAEnY5n6SsM3zIwnb3E8StrmfJGxzP0nY5n6SsM39JGGbfw1J2ObfY3NzE4D77rvvVq666qqrrvrfjspVV1111f9h9913360AOzs7bG9vs7+/z38U2wBI4j+SbQAk8Z/BNveTxH8029xPEv8ZbPNAkvjPZJsHksR/Jds8N0n8T2KbF0QSV/3PIwlJAEgCQBIAkgCQBIAkACRxP0kASAJAEveTxP0kcT9J3E8Sz00Sz48k/rVsI4kXhW0k8aKyjSQeyDaSsI0k/q1sIwnbSMI2krCNJGwjiQeyjSRsIwnbSMI2krCNJGwjCdtIwjaSsI0kbCMJ20jCNpKwjSRsIwnbSMI2krCNJGwDIAnbSMI2DyQJ20jCNgCSsM0DScI2AJKwzQNJwjYAkrANgCRsAyAJ2wBIwjYAkrDN8yMJ2zw/krDN8yMJ2/xXkYRt7icJ27wwkrDNA0nCNg8kCdtsbW0BcPbs2Wdw1VVXXXXV/3YEV1111VX/x/3DP/zDbwPs7OxgG9v8R7KNbWzzH8k2trHNfxbb2OY/i21sY5v/TLaxjW3+K9jGNraxzX8H29jGNraxzf9UtrGNbWxjG9vY5qr/PpIAkASAJAAkASAJAEkASAJAEpKQhCQkIQkASUhCEpKQhCQkIQlJSEISAJKQhCQkIQlJSEISkpAEgCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSkIQkJCEJSQBIAkASAJIAkASAJAAkASAJSUhCEpKQBIAkACQBIAkASUgCQBIAkgCQBIAkACQBIAkASQBI4oWRBIAkACQBIAkASQBI4rlJAkAS95MEgCTuJwkASdxPEs9NEveTxP0kcT9J3E8S95PE/SRxP0m8IJJ4QSTxgkjigSTxQJJ4IEk8kCQeSBL/WpL497j22msB+Id/+Iff5qqrrrrqqv/tCK666qqr/o/7+7//+98GuPHGG7mfbWxjm/9ItrHNfzTb2OY/i21sY5v/LLaxjW3+M9nGNraxzX8F29jGNrb572Ib29jGNrb5n842trGNbWxjG9vYxjZX/eeRBIAkJCEJSUhCEpKQhCQkIQlJSEISkgCQhCQkIQkASUhCEpKQhCQkIQlJSEISkpCEJCQhCUlIQhKSAJCEJCQhCUlIQhKSkIQkACQhCUlIQhKSAJCEJCQhCUlIQhIAkpAEgCQkASAJSUhCEgCSkIQkJCEJSUhCEpKQhCQkIQlJSEISkpCEJAAkASAJAElIQhKSAJAEgCQAJCEJSUgCQBIAkgCQBIAkACQBIIn7SQJAEgCSeEEkASAJAEkASAJAEveTBIAknpsknpsknpsk7ieJ+0ni30oS95PE/STxQJK4nyReEEk8kCT+M0nigSTxL5HEi2prawuA++6771auuuqqq676347gqquuuur/uLNnzz4D4KabbuL5sY1t/iPZxja2+Y9kG9vY5j+LbWxjm/8strGNbf6z2cY2tvmvYhvb2MY2/51sYxvb2MY2tvnfxDa2sY1tbGMb29jGNra56l9HEpKQhCQAJAEgCQBJAEgCQBIAkgCQhCQkIQlJSEISkpAEgCQkASAJSUhCEpKQhCQAJCEJSUhCEpKQhCQkIQlJSEISkpCEJAAkIQlJSEISkpCEJCQhCUkASEISkpCEJCQhCUlIQhKSkIQkJCEJSQBIAkASAJIAkASAJAAkASAJAEkASEISkpAEgCQAJAEgCUlIQhIAkgCQBIAkJAEgCQBJAEgCQBIAkrifJAAkASAJAEkASAJAEs9NEgCSAJAEgCSemyQAJHE/SQBI4n6SAJDE/SRxP0k8N0ncTxL3k8T9JPGikMQLIon7SeKBJPGCSOKBJPFAknggSTyQJP61JPEvkcRz29ra4qqrrrrqqv9TqFx11VVX/R9333333Qqws7PDC2MbAEn8R7INgCT+I9nmfpL4z2Cb+0niP4Nt7ieJ/0y2eSBJ/FewzXOTxH8n2zw3SfxvZpt/DUn8fyYJAEkASAJAEpIAkASAJAAkASAJAEkASOJ+kgCQxP0kcT9JPJAkHkgSL4wk/jvZRhL/0WwjCdtI4oFsIwnbSMI2kgCwjSRsIwnbSALANpKwjSRsIwnbSMI2kgCwjSRsIwnbSMI2krCNJGwjCdtIwjbPjyRsIwnbSMI2AJKwjSRs80CSsM0DScI2AJKwzQNJwjYAkrANgCRsAyAJ2wBIwjYAkrANgCRs8/xIwjbPjyRs8/xIwjb3k4Rt/qNIwjb3k4RtXhhJ2OaFufbaawH4rd/6re/hqquuuuqq/wuoXHXVVVf9H3f27Nlb+Vewzf0k8R/FNveTxH8k2wBI4j+Lbe4nif8MtrmfJP6z2eZ+kvivZJsHksR/N9u8IJL4v8Y2/1Ek8b+RJCQBIAkASQBIAkASAJIAkASAJAAkASAJAEncTxIAkrifJB5IEg8kiReFJB7INgCSeEFsI4l/LdtI4oFsI4l/LdtIwjaSsI0kHsg2krCNJB7INpKwjSQAbCMJ20jCNpIAsI0kbCMJ20jCNpKwDYAkbCMJ20jCNpKwjSRsIwnbSMI2krCNJGwjCdsASMI2krCNJGzzQJKwjSRsAyAJ20jCNgCSsM0DScI2AJKwDYAkbAMgCdu8MJKwDYAkbAMgCds8P5KwzfMjCdvcTxK2eX4kYZv7ScI295OEbe4nCdv8a0jCNi+MJGxz1VVXXXXV/1lUrrrqqqv+j7vvvvtu/Yd/+IfffrEXe7HXvummm7jjjjt4UdkGQBL/kWwDIIn/SLa5nyT+s9jmfpL4z2CbB5LEfybbPJAk/ivZ5rlJ4n8K2zw/krgKbPO/zalTp5CEbSRxP0k8P5J4fiTxQJL4l0jifyLb/Ets80C2eX5s8/zY5oFs89xs89xs80C2eSDbPD+2uZ9tJGGbB7LNc7PNA9lGErZ5INs8P7Z5brZ5QWzzgtjm+bHNC2Kbf4ltnh/bAEjCNi+MbSRhmxfGNi+MbV5UtgGQhG1eFLZ5UdgG4NprrwXgH/7hH36bq6666qqr/i+gctVVV1111b/INgCS+I9km/tJ4j+Sbe4nif8strmfJP6z2OZ+kvjPZpsHksR/Nds8N0n8T2KbF0QSV/3Ptbm5yVVXXXXVC/Jbv/Vb333ffffdylVXXXXVVf8XULnqqquu+n/g7//+73/7xV7sxV77xhtv5I477uDfyjb3k8R/JNsASOI/mm3uJ4n/LLa5nyT+s9jmgSTxn802DySJ/w62eW6S+J/INi+MJK767/P1X//17wMYEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxTL/1W7/13Vx11VVXXfV/BZWrrrrqqv8H/uEf/uF3AG666Sb+5E/+hP8ItgGQxH8k29xPEv/RbAMgif9MtrmfJP4z2eZ+kvivYJsHksR/F9s8N0n8T2ebF0YSV/3n+a3f+q3v5qqrrrrqqquuuuqq/w+oXHXVVVf9P3D27NlbAXZ2drCNJP6j2OZ+kviPZBsASfxHs839JPGfyTb3k8R/Jts8kCT+K9jmgSTx38k2z00S/5vY5kUhiauuuuqqq6666qqrrrrqBaJy1VVXXfX/wH333XcrwM7ODjs7O+zt7QEgif9ItgGQxH8k29xPEv/RbHM/Sfxnss39JPGfzTb3k8R/Fds8N0n8d7LN8yOJ/81s868liauuuuqqq6666qqrrvp/guCqq6666v+Jf/iHf/htgJ2dHe5nG9v8R7ONbWzzH802trHNfwbb2MY2/9lsYxvb2OY/m21sYxvb/FezjW1sY5v/KWxjG9vYxja2+b/MNraxjW1sYxvb2MY2trGNbWxjG9vYxja2ueqqq6666qqrrrrqqv8FCK666qqr/p/4+7//+98GuOmmm3hutrGNbf6j2cY2/xlsY5v/LLaxjW3+K9jGNrb5r2Ab29jGNv/VbGMb29jGNv+T2MY2trGNbWxjm6uusI1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9tcddVVV1111VVXXfX/DpWrrrrqqv8nzp49+wyAm266iRfGNgCS+I9km/tJ4j+Sbe4nif8MtrmfJP6z2eZ+kvivYJsHksR/Nds8N0n8T2ObF0QSV1111VVXXXXVVVddddX/GFSuuuqqq/6fuO+++24F2NnZ4UVhm/tJ4j+SbQAk8R/NNveTxH8G29xPEv/ZbPNAkvivYJsHksR/B9s8N0n8T2WbF0QSV1111VVXXXXVVVddddV/KSpXXXXVVf9PnD179lb+jWwDIIn/SLa5nyT+o9nmfpL4z2Cb+0niv4Jt7ieJ/yq2eSBJ/HexzXOTxP90tvmXSOKqq6666qqrrrrqqquu+g9DcNVVV131/8R999136z/8wz/89s7ODjfddBP/FraxzX8G29jmP4ttbGOb/yy2sY1t/qvYxja2sc1/JdvYxja2+e9mG9vYxja2+d/INraxjW1sYxvb2MY2trnqqquuuuqqq6666qqrXiRUrrrqqquu+lezzf0k8R/JNveTxH8G2wBI4j+Lbe4nif8qtrmfJP4r2eaBJPHfzTbPjyT+t7PNi0oSV1111VVXXXXVVVdd9f8UwVVXXXXV/yN///d//9sAN910E/9RbGOb/wy2sY1t/jPYxja2+c9kG9vYxjb/VWxjG9vY5r+abWxjG9vY5n8K29jGNraxjW3+r7KNbWxjG9vYxja2sY1tbGMb29jGNraxzVVXXXXVVVddddVVV/0vReWqq6666v+Rf/iHf/gdgJtuuon/aLa5nyT+o9nmfpL4j2ab+0niP5Nt7ieJ/yq2eSBJ/FezzQNJ4n8S2zw/kvj/zjZXXXXVVVddddVVV131vxCVq6666qr/R86ePXsrwM7ODra5nyT+I9kGQBL/GWwDIIn/DLa5nyT+M9nmfpL4r2SbB5LEfzXbPDdJ/E9jmxdEElddddVVV1111VVXXXXV/1hUrrrqqqv+H7nvvvtuBdjZ2WFnZ4e9vT0AbAMgif9ItrmfJP6j2eZ+kvjPYJv7SeI/k20eSBL/lWzzQJL472Cb5yaJ/6ls88JI4qqrrrrqqquuuuqqq676b0Nw1VVXXfX/zD/8wz/8NsDOzg7PzTa2sc1/NNvYxjb/GWxjG9v8Z7GNbWzzX8E2trHNfwfb2MY2tvnvZBvb2MY2tvnfwja2sY1tbGMb29jmqquuuuqqq6666qqrrvpPRXDVVVdd9f/M3//93/82wE033cQLYxvb/GewjW3+s9jGNrb5z2Ib29jGNv/ZbGMb29jmv4NtbGMb2/x3s41tbGMb2/xvZBvb2MY2trGNbWxjm6uuuuqqq6666qqrrrrq34zgqquuuur/mbNnzz4D4Oabb+ZFYRvb/GewjW1s85/FNraxzX8m29jGNv8VbGMb2/x3sY1tbGOb/wlsYxvb2MY2tvnfzja2sY1tbGMb29jGNraxzVVXXXXVVVddddVVV131HKhcddVVV/0/c999990KsLOzw7+Gbe4nif9otrmfJP4z2AZAEv+ZbHM/Sfxns80DSeK/g22emyT+J7DN8yOJ/2ts828liauuuuqqq6666qqrrvo/hspVV1111f8zZ8+evZV/J9sASOI/g20AJPGfwTb3k8R/JtvcTxL/FWxzP0n8d7LNA0nifxLbPD+S+P/INv9dJPGC2Oaqq6666qqrrrrqqqv+jQiuuuqqq/6fue+++279h3/4h9/e2dnhpptu4t/DNraxzX8G29jGNv9ZbGMb2/xns41tbPNfxTa2sY1t/rvZxja2sY1t/ieyjW1sYxvb2MY2V/3nsI1tbGMb29jGNlddddVVV1111VVXXfXvQOWqq6666qr/ELa5nyT+o9nmfpL4z2Cb+0niP5NtHkgS/xVs80CS+O9mm+cmif+pbPOCSOKqq6666qqrrrrqqquu+h+F4Kqrrrrq/6G///u//22Am266if8MtrHNfxbb2MY2/1lsYxvb/FewjW1s81/JNraxjW3+p7CNbWxjG9v8b2Ab29jGNraxjW1sc9VVV1111VVXXXXVVVf9l6Ny1VVXXfX/0D/8wz/8DsBNN92EbQAk8R/NNveTxH8G2wBI4j+LbR5IEv+ZbPNAkvivYpsHksT/FLZ5bpL438Q2/xJJXHXVVVddddVVV1111VX/YahcddVVV/0/dPbs2VsBjh07xv1scz9J/EezDYAk/jPY5n6S+M9km/tJ4j+bbe4nif9KtnkgSfxPYpvnRxL/W9nmRSGJq6666qqrrrrqqquuuupfROWqq6666v+h++6771aAnZ0ddnZ22Nvb44FsAyCJ/2i2uZ8k/jPY5n6S+M9km/tJ4j+bbR5IEv+VbPPcJPE/jW2emyT+L7HNv5Ykrrrqqquuuuqqq6666v8Zgquuuuqq/6f+4R/+4bcBdnZ2eEFsYxvb/GewjW1s85/FNraxzX8229jGNv9VbGMb29jmv4NtbGMb2/xPZRvb2MY2trHN/ye2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNba666qqrrrrqqquuuup/CYKrrrrqqv+n/v7v//63AW6++WZeFLaxzX8W29jGNv9ZbGMb2/xns41tbPNfyTa2sc1/F9vYxja2sc3/ZLaxjW1sYxvb2OaqF8w2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sY5urrrrqqquuuuqqq/7foXLVVVdd9f/cTTfdxL+Gbe4nif8MtgGQxH8W29xPEv+ZbPNAkvivYJsHksR/F9s8kCT+N7DNCyKJq6666qqrrrrqqquuuup/PCpXXXXVVf9P/cM//MPvABw7dox/K9sASOI/g23uJ4n/LLa5nyT+s9nmfpL4r2KbB5LEfxfbPDdJ/G9imxdGElddddVVV1111VVXXXXVfzsqV1111VX/T509e/ZW/oPY5n6S+M9gm/tJ4j+Lbe4nif9stnkgSfxXsc0DSeK/k22emyT+t7LNCyOJq6666qqrrrrqqquuuuo/HcFVV1111f9T9913363/8A//8Ns7OzvcdNNN/EexjW1s85/FNraxzX8m29jGNv9VbGMb2/xXs41tbGOb/wlsYxvb2MY2tvm/wDa2sY1tbGMb29jGNlddddVVV1111VVXXXXVvxuVq6666qqr/tPYBkAS/1lscz9J/Gexzf0k8V/BNg8kif9KtnlukvifwDbPTRL/19jmX0MSV1111VVXXXXVVVddddVzILjqqquu+n/s7//+738b4KabbsI2tvnPYBvb2OY/k21s85/NNraxjW3+q9jGNrb572Ib29jGNv+T2MY2trGNbWzz/4ltbGMb29jGNraxjW1sYxvb2MY2V1111VVXXXXVVVdd9X8YwVVXXXXV/2P/8A//8DsAN998M/ezjW3+s9jGNrb5z2Ib29jmv4JtbGOb/yq2sY1tbPPfxTa2sY1t/ieyjW1sYxvb2OaqZ7ONbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vY5t/CNraxjW1sYxvb2MY2trGNbWxjG9vY5qqrrrrqqquuuuqq/3eoXHXVVVf9P3b27NlbAY4dO8Zzs839JPGfwTYAkvjPYpv7SeI/m23uJ4n/KrZ5IEn8d7DNc5PE/0S2eUEkcdV/PttcddVVV1111VVXXXXVfzIqV1111VX/j9133323Auzs7LCzs8Pe3h7Pj20AJPGfwTb3k8R/FtvcTxL/2WzzQJL4r2KbB5LEfxfbPDdJ/E9mmxdEElddddVVV1111VVXXXXV/xoEV1111VX/z/3DP/zDbwMcO3aMf4ltbGOb/yy2sY1t/jPZxja2+a9iG9vY5r+abWxjG9v8d7ONbWxjG9v8b2Eb29jGNraxjW2uuuqqq6666qqrrrrqqv9xCK666qqr/p/7+7//+98GuOmmm/jXsI1tbPOfxTa2sc1/JtvYxja2+a9gG9vYxjb/1WxjG9vY5n8C29jGNraxzf82trGNbWxjG9vYxjZXXXXVVVddddVVV1111X85gquuuuqqqy67+eab+beyjW3+M9nGNrb5z2Yb29jmv4ptbGOb/w62sY1tbPM/hW1sYxvb2OZ/M9vYxja2sY1tbGMb29jmqquuuuqqq6666qqrrvoPQ+Wqq6666v+5f/iHf/gdgGPHjvHvZZv7SeI/i23uJ4n/TLa5nyT+K9jmgSTxX802DySJ/yls8/xI4v8K27yoJHHVVVddddVVV1111VVXvUBUrrrqqqv+nzt79uyt/Cewzf0k8Z/FNgCS+M9mm/tJ4r+Kbe4nif8OtnlukvifxDbPjyT+L7PNv4Ukrrrqqquuuuqqq6666v8Bgquuuuqq/+fuu+++W//hH/7ht3d2drj55pv5z2Ab2/xnso1tbPNfwTa2sc1/JdvYxja2+e9kG9vYxjb/U9nGNraxjW1s8/+dbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2tvmfwDa2sY1tbGObq6666qqrrrrqqqv+36Fy1VVXXXXVs9jGNpL4z2Cb+0niP4tt7ieJ/2y2eSBJ/FexzQNJ4r+LbZ6bJP6nss0LIomr/u1sc9VVV1111VVXXXXVVf9DEFx11VVXXcXf//3f/zbAzTffDIBtbGOb/yy2sY1t/jPZxja2+a9iG9vY5r+abWxjG9v8d7ONbWxjG9v8b2Ab29jGNraxjW2uuuqqq6666qqrrrrqqv9VqFx11VVXXcU//MM//A7AzTffzHOzDYAk/rPY5n6S+M9imweSxH822zyQJP4r2eaBJPHfzTbPTRL/W9jmhZHEVVddddVVV1111VVXXfU/BpWrrrrqqqs4e/bsrQA7Ozu8ILa5nyT+s9gGQBL/2WxzP0n8V7DN/STxX802DySJ/wls89wk8b+RbV4YSVx11VVXXXXVVVddddVV/2WoXHXVVVddxX333XcrwLFjx3hR2OZ+kvjPYJv7SeI/m23uJ4n/CrZ5IEn8V7PNA0nifwrbPDdJ/G9nmxeFJK666qqrrrrqqquuuuqqfzeCq6666qqrLvuHf/iH3wa4+eab+dewjW3+M9nGNrb5r2Ab29jmv5JtbGOb/y62sY1tbGOb/0lsYxvb2MY2tvm/yDa2sY1tbGMb29jGNraxzVVXXXXVVVddddVVV131AhFcddVVV1112X333XcrwM0338y/hW1sY5v/TLaxjW3+K9jGNrb5r2Qb29jGNv+dbGMb29jmfyLb2MY2trGNbf6/sI1tbGMb29jGNraxjW1sYxvb2MY2V1111VVXXXXVVVdd9X8clauuuuqqqy677777bgW4+eab+feyzf0k8Z/FNveTxH822zyQJP6r2OaBJPHfxTbPTRL/E9nm+ZHEVVfY5r+DJP4tbHPVVVddddVVV1111VX/ClSuuuqqq6667B/+4R9+h/8EtgGQxH8m29xPEv8VbHM/SfxXss0DSeK/k20eSBL/k9nmBZHEVf/5bHPVVVddddVVV1111VX/BahcddVVV1112dmzZ28F2NnZ4T+Dbe4nif9MtrmfJP4r2OZ+kvivZpsHksR/J9s8N0n8b2CbF0QSV1111VVXXXXVVVddddX/KgRXXXXVVVdddt99991633333Xrs2DFuuukm/jPZxja2+c9mG9vY5r+KbWxjG9v8d7CNbWxjm/8JbGMb29jGNv/b2MY2trGNbWxjG9tcddVVV1111VVXXXXVVf/jEFx11VVXXfUsZ8+evZVnso1tbPOfyTa2sc1/NtvYxjb/lWxjG9v8d7GNbWxjm/8pbGMb29jGNv+b2cY2trGNbWxjG9vY5qqrrrrqqquuuuqqq676L0Vw1VVXXXXVs/z93//9bwPcfPPNPJBtbGOb/0y2sY1t/rPZxja2sc1/FdvYxja2+e9iG9vYxjb/k9jGNraxjW1s83+FbWxjG9vYxja2sY1tbHPVVVddddVVV1111VVX/YcguOqqq6666ln+4R/+4XcAbrnlFl4Q29jmP5ttbGOb/wq2sY1t/ivZxja2sc1/F9vYxja2+Z/INraxjW1sY5v/q2xjG9vYxja2sY1tbGMb21x11VVXXXXVVVddddVVLxCVq6666qqrnuXs2bO3Auzs7PAvsc39JPGfyTb3k8R/NtvcTxL/lWxzP0n8d7HNc5PE/0S2eX4k8f+Fbf49JHHVVVddddVVV1111VX/R1G56qqrrrrqWe67775bAY4dO8a/hm3uJ4n/TLa5nyT+s9nmfpL4r2SbB5LEfyfbPJAk/iezzfMjiauek22uuuqqq6666qqrrrrq/yiCq6666qqrnsM//MM//DbAzTffzL+FbWxjm/9strGNbf4r2MY2trHNfzXb2MY2tvnvZhvb2MY2tvnfwDa2sY1tbGMb21x11VVXXXXVVVddddVV/+cQXHXVVVdd9Rzuu+++WwFuvvlm/r1sY5v/CraxjW3+q9jGNrb572Ab29jGNv8T2MY2trGNbf43sY1tbGMb29jGNlddddVVV1111VVXXXXV/0oEV1111VVXPYf77rvvVoBbbrmF/yi2sY1t/ivYxja2+a9iG9vYxjb/HWxjG9vY5n8K29jGNraxzf9GtrGNbWxjG9vYxjZXXXXVVVddddVVV1111f9IVK666qqrrnoO//AP//A7/Ceyzf0k8Z/NNveTxH8V29xPEv8dbPNAkvifwjbPTRL/m9nmXyKJq6666qqrrrrqqquuuuq/FJWrrrrqqquew9mzZ28F2NnZ4T+bbe4nif9strmfJP6r2OaBJPHfwTYPJIn/SWzz/Eji/wrbvCgkcdVVV1111VVXXXXVVVf9hyC46qqrrrrqOdx333233nfffbceO3aMm266CdvY5j+bbWxjm/8KtrGNbf6r2cY2tvnvZBvb2MY2tvmfyDa2sY1tbGOb/8tsYxvb2MY2trGNbWxjG9tcddVVV1111VVXXXXVVS8UwVVXXXXVVc/j7Nmzt/JcbGMb2/xns41tbPNfwTa2sY1t/ivZxja2sc1/N9vYxja2+Z/MNraxjW1sY5v/b2xjG9vYxja2sY1tbGMb29jGNraxzVVXXXXVVVddddVVV/0/QHDVVVddddXz+Pu///vfBrjlllt4fmxjG9v8Z7ONbWzzX8U2trHNfzXb2MY2tvnvZhvb2MY2tvmfzja2sY1tbGObq56XbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sc2/hm1sYxvb2MY2trGNbWxjG9vYxja2sY1tbHPVVVddddVVV1111f87VK666qqrrnoe//AP//A7ADfffDP/EtsASOI/m23uJ4n/Cra5nyT+q9nmgSTx3802DySJ/w1s84JI4qr/era56qqrrrrqqquuuuqq/2RUrrrqqquueh5nz569FeDYsWO8qGxzP0n8Z7PN/STxX8E2DySJ/2q2eSBJ/HezzXOTxP8mtnlBJHHVVVddddVVV1111VVX/a9F5aqrrrrqqudx33333Qpw7Ngx/i1scz9J/Gezzf0k8V/FNveTxH8H2zyQJP4nsM1zk8T/RrZ5YSRx1VVXXXXVVVddddVVV/2PRXDVVVddddXz9Q//8A+/DXDzzTfz72Eb29jmv4JtbGOb/0q2sY1tbPPfxTa2sY1t/iexjW1sYxvb2OZ/O9vYxja2sY1tbGObq6666qqrrrrqqquuuuq/FcFVV1111VXP13333XcrwC233MJ/FNvYxjb/FWxjG9v8V7ONbWzz38k2trGNbf4nso1tbGMb2/xfYhvb2MY2trGNbWxjG9tcddVVV1111VVXXXXVVf8pqFx11VVXXfV83XfffbcCHDt2jP8MtrmfJP6z2eZ+kvivZJsHksR/F9s8N0n8T2Ob50cS/1fZ5l9DElddddVVV1111VVXXXXVv4jKVVddddVVz9c//MM//A7Azs4O/9lscz9J/GezzQNJ4r+SbR5IEv+dbPNAkvifyjbPjyT+v7HNv4Ukrrrqqquuuuqqq6666v8RKlddddVVVz1fZ8+evRXg2LFj2AZAEv/ZbHM/SfxXsM39JPFfzTb3k8R/N9s8N0n8T2ab50cSVz0n2/xnk8R/F9tcddVVV1111VVXXXXVAxBcddVVV131fN1333233nfffbceO3aMW265BQDb2MY2/xVsYxvb/FexjW1s89/BNraxjW3+p7CNbWxjm/8tbGMb29jGNraxzVX/eWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vYxja2sc1VV1111VVXXXXVVVc9F4KrrrrqqqteoLNnz97KC2Ab29jmv4JtbGOb/yq2sY1tbPPfwTa2sY1t/qewjW1sYxvb/G9jG9vYxja2sY1trrrqqquuuuqqq6666qr/M6hcddVVV131Av393//9b7/Yi73Ya7/4i784/1NJ4r+DJP4nkMRV//UkcdVVV1111VVXXXXVVVf9r0DlqquuuuqqF+gf/uEffue+++679SVe4iUe/BIv8RJcddVVV/1f8A//8A+/zVVXXXXVVVddddVV/1+gBz3oQVx11VVXXfWCvdiLvdhrv9M7vdNncdVVV131f8RnfuZnvg5XXXXVVVddddVVV/1/gR70oAdx1VVXXXXVVVddddVVV1111VVXXXXVVVf9n0Tlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V/GPS3YW338jIp4AAAAASUVORK5CYII=) +![Rendered example of union 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADzVElEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX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BsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCekwHxnAyI52RAPCcD4jkZEM/JgHhOBsRzMiCe6ezZs7fed999t3LVVVddddVV/z3Qgx70IK666qqrrrrqqquuuuqqq6666qqrrrrqqv+TqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X8U/Arqr2cdD02ooAAAAAElFTkSuQmCC) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 267f082012e..e436b14cd55 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -2033,9 +2033,9 @@ dependencies = [ [[package]] name = "kittycad-modeling-cmds" -version = "0.2.110" +version = "0.2.112" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfd16800a12a2eaefff53958bd871875c246e669274269f7caefc25d19641ad" +checksum = "08f06b4eb4e98ded7cda21586347baeb8055c4898f609f55f7c544cfed2b229c" dependencies = [ "anyhow", "chrono", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 8ab69166720..77955d822f2 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -36,7 +36,7 @@ dashmap = { version = "6.1.0" } http = "1" indexmap = "2.7.0" kittycad = { version = "0.3.36", default-features = false, features = ["js", "requests"] } -kittycad-modeling-cmds = { version = "0.2.110", features = ["ts-rs", "websocket"] } +kittycad-modeling-cmds = { version = "0.2.112", features = ["ts-rs", "websocket"] } lazy_static = "1.5.0" miette = "7.5.0" pyo3 = { version = "0.24.0" } diff --git a/rust/kcl-lib/src/execution/exec_ast.rs b/rust/kcl-lib/src/execution/exec_ast.rs index 677f25923ce..d11cc6210bf 100644 --- a/rust/kcl-lib/src/execution/exec_ast.rs +++ b/rust/kcl-lib/src/execution/exec_ast.rs @@ -939,25 +939,40 @@ impl Node { if self.operator == BinaryOperator::Add || self.operator == BinaryOperator::Or { if let (KclValue::Solid { value: left }, KclValue::Solid { value: right }) = (&left_value, &right_value) { let args = crate::std::Args::new(Default::default(), self.into(), ctx.clone(), None); - let result = - crate::std::csg::inner_union(vec![*left.clone(), *right.clone()], exec_state, args).await?; + let result = crate::std::csg::inner_union( + vec![*left.clone(), *right.clone()], + Default::default(), + exec_state, + args, + ) + .await?; return Ok(result.into()); } } else if self.operator == BinaryOperator::Sub { // Check if we have solids. if let (KclValue::Solid { value: left }, KclValue::Solid { value: right }) = (&left_value, &right_value) { let args = crate::std::Args::new(Default::default(), self.into(), ctx.clone(), None); - let result = - crate::std::csg::inner_subtract(vec![*left.clone()], vec![*right.clone()], exec_state, args) - .await?; + let result = crate::std::csg::inner_subtract( + vec![*left.clone()], + vec![*right.clone()], + Default::default(), + exec_state, + args, + ) + .await?; return Ok(result.into()); } } else if self.operator == BinaryOperator::And { // Check if we have solids. if let (KclValue::Solid { value: left }, KclValue::Solid { value: right }) = (&left_value, &right_value) { let args = crate::std::Args::new(Default::default(), self.into(), ctx.clone(), None); - let result = - crate::std::csg::inner_intersect(vec![*left.clone(), *right.clone()], exec_state, args).await?; + let result = crate::std::csg::inner_intersect( + vec![*left.clone(), *right.clone()], + Default::default(), + exec_state, + args, + ) + .await?; return Ok(result.into()); } } diff --git a/rust/kcl-lib/src/std/csg.rs b/rust/kcl-lib/src/std/csg.rs index 7c7bcb74f55..c6067c44a27 100644 --- a/rust/kcl-lib/src/std/csg.rs +++ b/rust/kcl-lib/src/std/csg.rs @@ -2,6 +2,13 @@ use anyhow::Result; use kcl_derive_docs::stdlib; +use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, ModelingCmd}; +use kittycad_modeling_cmds::{ + self as kcmc, + ok_response::OkModelingCmdResponse, + output::{BooleanIntersection, BooleanSubtract, BooleanUnion}, + websocket::OkWebSocketResponseData, +}; use crate::{ errors::{KclError, KclErrorDetails}, @@ -9,10 +16,13 @@ use crate::{ std::Args, }; +use super::DEFAULT_TOLERANCE; + /// Union two or more solids into a single solid. pub async fn union(exec_state: &mut ExecState, args: Args) -> Result { let solids: Vec = args.get_unlabeled_kw_arg_typed("solids", &RuntimeType::Union(vec![RuntimeType::solids()]), exec_state)?; + let tolerance = args.get_kw_arg_opt("tolerance")?; if solids.len() < 2 { return Err(KclError::UndefinedValue(KclErrorDetails { @@ -21,7 +31,7 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = cube([20, 10]) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// unionedPart = union([part001, part002]) /// ``` @@ -51,18 +62,19 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = cube([20, 10]) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// // This is the equivalent of: union([part001, part002]) /// unionedPart = part001 + part002 @@ -73,18 +85,19 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = cube([20, 10]) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// // This is the equivalent of: union([part001, part002]) /// // Programmers will understand `|` as a union operation, but mechanical engineers @@ -96,31 +109,64 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result, + tolerance: Option, exec_state: &mut ExecState, args: Args, ) -> Result, KclError> { + let solid_out_id = exec_state.next_uuid(); + + let mut solid = solids[0].clone(); + solid.id = solid_out_id; + let mut new_solids = vec![solid.clone()]; + + if args.ctx.no_engine_commands().await { + return Ok(new_solids); + } + // Flush the fillets for the solids. args.flush_batch_for_solids(exec_state, &solids).await?; - // TODO: call the engine union operation. - // TODO: figure out all the shit after for the faces etc. + let result = args + .send_modeling_cmd( + solid_out_id, + ModelingCmd::from(mcmd::BooleanUnion { + solid_ids: solids.iter().map(|s| s.id).collect(), + tolerance: LengthUnit(tolerance.unwrap_or(DEFAULT_TOLERANCE)), + }), + ) + .await?; + + let OkWebSocketResponseData::Modeling { + modeling_response: OkModelingCmdResponse::BooleanUnion(BooleanUnion { extra_solid_ids }), + } = result + else { + return Err(KclError::Internal(KclErrorDetails { + message: "Failed to get the result of the union operation.".to_string(), + source_ranges: vec![args.source_range], + })); + }; + + // If we have more solids, set those as well. + if !extra_solid_ids.is_empty() { + solid.id = extra_solid_ids[0]; + new_solids.push(solid.clone()); + } - // For now just return the first solid. - // Til we have a proper implementation. - Ok(vec![solids[0].clone()]) + Ok(new_solids) } /// Intersect returns the shared volume between multiple solids, preserving only /// overlapping regions. pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result { let solids: Vec = args.get_unlabeled_kw_arg_typed("solids", &RuntimeType::solids(), exec_state)?; + let tolerance = args.get_kw_arg_opt("tolerance")?; if solids.len() < 2 { return Err(KclError::UndefinedValue(KclErrorDetails { @@ -129,7 +175,7 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = cube([8, 8]) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// intersectedPart = intersect([part001, part002]) /// ``` @@ -165,18 +212,19 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = cube([8, 8]) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// // This is the equivalent of: intersect([part001, part002]) /// intersectedPart = part001 & part002 @@ -186,25 +234,57 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result, + tolerance: Option, exec_state: &mut ExecState, args: Args, ) -> Result, KclError> { + let solid_out_id = exec_state.next_uuid(); + + let mut solid = solids[0].clone(); + solid.id = solid_out_id; + let mut new_solids = vec![solid.clone()]; + + if args.ctx.no_engine_commands().await { + return Ok(new_solids); + } + // Flush the fillets for the solids. args.flush_batch_for_solids(exec_state, &solids).await?; - // TODO: call the engine union operation. - // TODO: figure out all the shit after for the faces etc. + let result = args + .send_modeling_cmd( + solid_out_id, + ModelingCmd::from(mcmd::BooleanIntersection { + solid_ids: solids.iter().map(|s| s.id).collect(), + tolerance: LengthUnit(tolerance.unwrap_or(DEFAULT_TOLERANCE)), + }), + ) + .await?; + + let OkWebSocketResponseData::Modeling { + modeling_response: OkModelingCmdResponse::BooleanIntersection(BooleanIntersection { extra_solid_ids }), + } = result + else { + return Err(KclError::Internal(KclErrorDetails { + message: "Failed to get the result of the intersection operation.".to_string(), + source_ranges: vec![args.source_range], + })); + }; + + // If we have more solids, set those as well. + if !extra_solid_ids.is_empty() { + solid.id = extra_solid_ids[0]; + new_solids.push(solid.clone()); + } - // For now just return the first solid. - // Til we have a proper implementation. - Ok(vec![solids[0].clone()]) + Ok(new_solids) } /// Subtract removes tool solids from base solids, leaving the remaining material. @@ -212,7 +292,23 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result = args.get_unlabeled_kw_arg_typed("solids", &RuntimeType::solids(), exec_state)?; let tools: Vec = args.get_kw_arg_typed("tools", &RuntimeType::solids(), exec_state)?; - let solids = inner_subtract(solids, tools, exec_state, args).await?; + if solids.len() > 1 { + return Err(KclError::UndefinedValue(KclErrorDetails { + message: "Only one solid is allowed for a subtract operation, currently.".to_string(), + source_ranges: vec![args.source_range], + })); + } + + if tools.len() > 1 { + return Err(KclError::UndefinedValue(KclErrorDetails { + message: "Only one tool is allowed for a subtract operation, currently.".to_string(), + source_ranges: vec![args.source_range], + })); + } + + let tolerance = args.get_kw_arg_opt("tolerance")?; + + let solids = inner_subtract(solids, tools, tolerance, exec_state, args).await?; Ok(solids.into()) } @@ -227,20 +323,19 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = startSketchOn('XY') -/// |> circle(center = [0, 0], radius = 2) -/// |> extrude(length = 10) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// subtractedPart = subtract([part001], tools=[part002]) /// ``` @@ -250,20 +345,19 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([center[0] - 10, center[1] - 10], %) -/// |> line(endAbsolute = [center[0] + 10, center[1] - 10]) -/// |> line(endAbsolute = [center[0] + 10, center[1] + 10]) -/// |> line(endAbsolute = [center[0] - 10, center[1] + 10]) +/// |> startProfileAt([center[0] - size, center[1] - size], %) +/// |> line(endAbsolute = [center[0] + size, center[1] - size]) +/// |> line(endAbsolute = [center[0] + size, center[1] + size]) +/// |> line(endAbsolute = [center[0] - size, center[1] + size]) /// |> close() /// |> extrude(length = 10) /// } /// -/// part001 = cube([0, 0]) -/// part002 = startSketchOn('XY') -/// |> circle(center = [0, 0], radius = 2) -/// |> extrude(length = 10) +/// part001 = cube([0, 0], 10) +/// part002 = cube([7, 3], 5) +/// |> translate(z = 1) /// /// // This is the equivalent of: subtract([part001], tools=[part002]) /// subtractedPart = part001 - part002 @@ -273,26 +367,59 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result, tools: Vec, + tolerance: Option, exec_state: &mut ExecState, args: Args, ) -> Result, KclError> { + let solid_out_id = exec_state.next_uuid(); + + let mut solid = solids[0].clone(); + solid.id = solid_out_id; + let mut new_solids = vec![solid.clone()]; + + if args.ctx.no_engine_commands().await { + return Ok(new_solids); + } + // Flush the fillets for the solids and the tools. let combined_solids = solids.iter().chain(tools.iter()).cloned().collect::>(); args.flush_batch_for_solids(exec_state, &combined_solids).await?; - // TODO: call the engine union operation. - // TODO: figure out all the shit after for the faces etc. + let result = args + .send_modeling_cmd( + solid_out_id, + ModelingCmd::from(mcmd::BooleanSubtract { + target_ids: solids.iter().map(|s| s.id).collect(), + tool_ids: tools.iter().map(|s| s.id).collect(), + tolerance: LengthUnit(tolerance.unwrap_or(DEFAULT_TOLERANCE)), + }), + ) + .await?; + + let OkWebSocketResponseData::Modeling { + modeling_response: OkModelingCmdResponse::BooleanSubtract(BooleanSubtract { extra_solid_ids }), + } = result + else { + return Err(KclError::Internal(KclErrorDetails { + message: "Failed to get the result of the subtract operation.".to_string(), + source_ranges: vec![args.source_range], + })); + }; + + // If we have more solids, set those as well. + if !extra_solid_ids.is_empty() { + solid.id = extra_solid_ids[0]; + new_solids.push(solid.clone()); + } - // For now just return the first solid. - // Til we have a proper implementation. - Ok(vec![solids[0].clone()]) + Ok(new_solids) } diff --git a/rust/kcl-lib/tests/intersect_cubes/artifact_commands.snap b/rust/kcl-lib/tests/intersect_cubes/artifact_commands.snap index c3b4f9dabe0..ddfc05c36dc 100644 --- a/rust/kcl-lib/tests/intersect_cubes/artifact_commands.snap +++ b/rust/kcl-lib/tests/intersect_cubes/artifact_commands.snap @@ -178,7 +178,7 @@ description: Artifact commands intersect_cubes.kcl "command": { "type": "extrude", "target": "[uuid]", - "distance": 10.0, + "distance": 20.0, "faces": null, "opposite": "None" } @@ -342,7 +342,7 @@ description: Artifact commands intersect_cubes.kcl "type": "move_path_pen", "path": "[uuid]", "to": { - "x": -2.0, + "x": 2.0, "y": -2.0, "z": 0.0 } @@ -364,7 +364,7 @@ description: Artifact commands intersect_cubes.kcl "segment": { "type": "line", "end": { - "x": 18.0, + "x": 12.0, "y": -2.0, "z": 0.0 }, @@ -381,8 +381,8 @@ description: Artifact commands intersect_cubes.kcl "segment": { "type": "line", "end": { - "x": 18.0, - "y": 18.0, + "x": 12.0, + "y": 8.0, "z": 0.0 }, "relative": false @@ -398,8 +398,8 @@ description: Artifact commands intersect_cubes.kcl "segment": { "type": "line", "end": { - "x": -2.0, - "y": 18.0, + "x": 2.0, + "y": 8.0, "z": 0.0 }, "relative": false @@ -544,5 +544,41 @@ description: Artifact commands intersect_cubes.kcl "edge_id": "[uuid]", "face_id": "[uuid]" } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "set_object_transform", + "object_id": "[uuid]", + "transforms": [ + { + "translate": { + "property": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "set": false, + "is_local": true + }, + "rotate_rpy": null, + "rotate_angle_axis": null, + "scale": null + } + ] + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_intersection", + "solid_ids": [ + "[uuid]", + "[uuid]" + ], + "tolerance": 0.0000001 + } } ] diff --git a/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md index 0acf8a42451..d94dcb7c60a 100644 --- a/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/intersect_cubes/artifact_graph_flowchart.snap.md @@ -1,23 +1,23 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[52, 103, 0]"] - 3["Segment
[111, 163, 0]"] - 4["Segment
[171, 223, 0]"] - 5["Segment
[231, 283, 0]"] - 6["Segment
[291, 298, 0]"] + 2["Path
[58, 113, 0]"] + 3["Segment
[121, 177, 0]"] + 4["Segment
[185, 241, 0]"] + 5["Segment
[249, 305, 0]"] + 6["Segment
[313, 320, 0]"] 7[Solid2d] end subgraph path24 [Path] - 24["Path
[52, 103, 0]"] - 25["Segment
[111, 163, 0]"] - 26["Segment
[171, 223, 0]"] - 27["Segment
[231, 283, 0]"] - 28["Segment
[291, 298, 0]"] + 24["Path
[58, 113, 0]"] + 25["Segment
[121, 177, 0]"] + 26["Segment
[185, 241, 0]"] + 27["Segment
[249, 305, 0]"] + 28["Segment
[313, 320, 0]"] 29[Solid2d] end - 1["Plane
[27, 44, 0]"] - 8["Sweep Extrusion
[306, 326, 0]"] + 1["Plane
[33, 50, 0]"] + 8["Sweep Extrusion
[328, 354, 0]"] 9[Wall] 10[Wall] 11[Wall] @@ -32,8 +32,8 @@ flowchart LR 20["SweepEdge Adjacent"] 21["SweepEdge Opposite"] 22["SweepEdge Adjacent"] - 23["Plane
[27, 44, 0]"] - 30["Sweep Extrusion
[306, 326, 0]"] + 23["Plane
[33, 50, 0]"] + 30["Sweep Extrusion
[328, 354, 0]"] 31[Wall] 32[Wall] 33[Wall] diff --git a/rust/kcl-lib/tests/intersect_cubes/ast.snap b/rust/kcl-lib/tests/intersect_cubes/ast.snap index e1fb2e85387..d60d26aee73 100644 --- a/rust/kcl-lib/tests/intersect_cubes/ast.snap +++ b/rust/kcl-lib/tests/intersect_cubes/ast.snap @@ -101,16 +101,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -149,16 +153,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -246,16 +254,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -294,16 +306,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -386,16 +402,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -434,16 +454,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -526,16 +550,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -574,16 +602,20 @@ description: Result of parsing intersect_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -656,14 +688,38 @@ description: Result of parsing intersect_cubes.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "10", + "left": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" } } ], @@ -719,6 +775,16 @@ description: Result of parsing intersect_cubes.kcl "start": 0, "type": "Identifier" } + }, + { + "type": "Parameter", + "identifier": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + } } ], "start": 0, @@ -780,6 +846,18 @@ description: Result of parsing intersect_cubes.kcl "start": 0, "type": "ArrayExpression", "type": "ArrayExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } ], "callee": { @@ -825,61 +903,129 @@ description: Result of parsing intersect_cubes.kcl "type": "Identifier" }, "init": { - "arguments": [ + "body": [ { - "commentStart": 0, - "elements": [ + "arguments": [ { "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + ], "end": 0, - "raw": "8", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 8.0, - "suffix": "None" - } + "type": "ArrayExpression", + "type": "ArrayExpression" }, { "commentStart": 0, "end": 0, - "raw": "8", + "raw": "5", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 8.0, + "value": 5.0, "suffix": "None" } } ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cube", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, "end": 0, "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "CallExpression", + "type": "CallExpression" + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "translate", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": "cube", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "PipeExpression", + "type": "PipeExpression" }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/intersect_cubes/input.kcl b/rust/kcl-lib/tests/intersect_cubes/input.kcl index 962ba413552..2214210887b 100644 --- a/rust/kcl-lib/tests/intersect_cubes/input.kcl +++ b/rust/kcl-lib/tests/intersect_cubes/input.kcl @@ -1,14 +1,15 @@ -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() - |> extrude(length = 10) + |> extrude(length = 2 * size) } -part001 = cube([0, 0]) -part002 = cube([8, 8]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) fullPart = intersect([part001, part002]) diff --git a/rust/kcl-lib/tests/intersect_cubes/ops.snap b/rust/kcl-lib/tests/intersect_cubes/ops.snap index 658446ab4b8..abeb5587aaf 100644 --- a/rust/kcl-lib/tests/intersect_cubes/ops.snap +++ b/rust/kcl-lib/tests/intersect_cubes/ops.snap @@ -10,7 +10,7 @@ description: Operations executed intersect_cubes.kcl "name": "cube", "functionSourceRange": [ 7, - 328, + 356, 0 ], "unlabeledArg": null, @@ -38,7 +38,7 @@ description: Operations executed intersect_cubes.kcl "length": { "value": { "type": "Number", - "value": 10.0, + "value": 20.0, "ty": { "type": "Default", "len": { @@ -75,7 +75,7 @@ description: Operations executed intersect_cubes.kcl "name": "cube", "functionSourceRange": [ 7, - 328, + 356, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/intersect_cubes/program_memory.snap b/rust/kcl-lib/tests/intersect_cubes/program_memory.snap index 20d1b1de58a..c6953ab8f58 100644 --- a/rust/kcl-lib/tests/intersect_cubes/program_memory.snap +++ b/rust/kcl-lib/tests/intersect_cubes/program_memory.snap @@ -7,182 +7,365 @@ description: Variables in memory after executing intersect_cubes.kcl "type": "Function" }, "fullPart": { - "type": "Solid", - "value": { - "type": "Solid", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": [ - { - "faceId": "[uuid]", + "type": "HomArray", + "value": [ + { + "type": "Solid", + "value": { + "type": "Solid", "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - } - ], - "sketch": { - "type": "Sketch", - "id": "[uuid]", - "paths": [ - { - "__geoMeta": { + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - -10.0, - -10.0 - ], - "tag": null, - "to": [ - 10.0, - -10.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - 10.0, - -10.0 - ], - "tag": null, - "to": [ - 10.0, - 10.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - 10.0, - 10.0 - ], - "tag": null, - "to": [ - -10.0, - 10.0 + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } ], - "type": "ToPoint", + "on": { + "type": "plane", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": "XY", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "zAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "units": { + "type": "Mm" + } + }, + "start": { + "from": [ + -10.0, + -10.0 + ], + "to": [ + -10.0, + -10.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", "units": { "type": "Mm" } }, - { - "__geoMeta": { + "height": 20.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + } + } + }, + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - -10.0, - 10.0 - ], - "tag": null, - "to": [ - -10.0, - -10.0 + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } ], - "type": "ToPoint", + "on": { + "type": "plane", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": "XY", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "zAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "units": { + "type": "Mm" + } + }, + "start": { + "from": [ + -10.0, + -10.0 + ], + "to": [ + -10.0, + -10.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", "units": { "type": "Mm" } - } - ], - "on": { - "type": "plane", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": "XY", - "origin": { - "x": 0.0, - "y": 0.0, - "z": 0.0 }, - "xAxis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "yAxis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "zAxis": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - }, - "units": { - "type": "Mm" - } - }, - "start": { - "from": [ - -10.0, - -10.0 - ], - "to": [ - -10.0, - -10.0 - ], + "height": 20.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", "units": { "type": "Mm" - }, - "tag": null, - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] } - }, - "artifactId": "[uuid]", - "originalId": "[uuid]", - "units": { - "type": "Mm" } - }, - "height": 10.0, - "startCapId": "[uuid]", - "endCapId": "[uuid]", - "units": { - "type": "Mm" } - } + ] }, "part001": { "type": "Solid", @@ -354,7 +537,7 @@ description: Variables in memory after executing intersect_cubes.kcl "type": "Mm" } }, - "height": 10.0, + "height": 20.0, "startCapId": "[uuid]", "endCapId": "[uuid]", "units": { @@ -408,12 +591,12 @@ description: Variables in memory after executing intersect_cubes.kcl "sourceRange": [] }, "from": [ - -2.0, + 2.0, -2.0 ], "tag": null, "to": [ - 18.0, + 12.0, -2.0 ], "type": "ToPoint", @@ -427,13 +610,13 @@ description: Variables in memory after executing intersect_cubes.kcl "sourceRange": [] }, "from": [ - 18.0, + 12.0, -2.0 ], "tag": null, "to": [ - 18.0, - 18.0 + 12.0, + 8.0 ], "type": "ToPoint", "units": { @@ -446,13 +629,13 @@ description: Variables in memory after executing intersect_cubes.kcl "sourceRange": [] }, "from": [ - 18.0, - 18.0 + 12.0, + 8.0 ], "tag": null, "to": [ - -2.0, - 18.0 + 2.0, + 8.0 ], "type": "ToPoint", "units": { @@ -465,12 +648,12 @@ description: Variables in memory after executing intersect_cubes.kcl "sourceRange": [] }, "from": [ - -2.0, - 18.0 + 2.0, + 8.0 ], "tag": null, "to": [ - -2.0, + 2.0, -2.0 ], "type": "ToPoint", @@ -510,11 +693,11 @@ description: Variables in memory after executing intersect_cubes.kcl }, "start": { "from": [ - -2.0, + 2.0, -2.0 ], "to": [ - -2.0, + 2.0, -2.0 ], "units": { diff --git a/rust/kcl-lib/tests/intersect_cubes/rendered_model.png b/rust/kcl-lib/tests/intersect_cubes/rendered_model.png index d565d034a9d..6c6a2528f95 100644 Binary files a/rust/kcl-lib/tests/intersect_cubes/rendered_model.png and b/rust/kcl-lib/tests/intersect_cubes/rendered_model.png differ diff --git a/rust/kcl-lib/tests/intersect_cubes/unparsed.snap b/rust/kcl-lib/tests/intersect_cubes/unparsed.snap index 6a1a7b9ba5d..bb50b83f2bf 100644 --- a/rust/kcl-lib/tests/intersect_cubes/unparsed.snap +++ b/rust/kcl-lib/tests/intersect_cubes/unparsed.snap @@ -2,17 +2,18 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing intersect_cubes.kcl --- -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() - |> extrude(length = 10) + |> extrude(length = 2 * size) } -part001 = cube([0, 0]) -part002 = cube([8, 8]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) fullPart = intersect([part001, part002]) diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_intersect0.png b/rust/kcl-lib/tests/outputs/serial_test_example_intersect0.png index d565d034a9d..21d9ba09df3 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_intersect0.png and b/rust/kcl-lib/tests/outputs/serial_test_example_intersect0.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_intersect1.png b/rust/kcl-lib/tests/outputs/serial_test_example_intersect1.png index d565d034a9d..21d9ba09df3 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_intersect1.png and b/rust/kcl-lib/tests/outputs/serial_test_example_intersect1.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_subtract0.png b/rust/kcl-lib/tests/outputs/serial_test_example_subtract0.png index 368339b2d83..2b61de7bdd9 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_subtract0.png and b/rust/kcl-lib/tests/outputs/serial_test_example_subtract0.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_subtract1.png b/rust/kcl-lib/tests/outputs/serial_test_example_subtract1.png index 368339b2d83..2b61de7bdd9 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_subtract1.png and b/rust/kcl-lib/tests/outputs/serial_test_example_subtract1.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_union0.png b/rust/kcl-lib/tests/outputs/serial_test_example_union0.png index 8ba68ea02e7..8e4e7e51208 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_union0.png and b/rust/kcl-lib/tests/outputs/serial_test_example_union0.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_union1.png b/rust/kcl-lib/tests/outputs/serial_test_example_union1.png index 8ba68ea02e7..8e4e7e51208 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_union1.png and b/rust/kcl-lib/tests/outputs/serial_test_example_union1.png differ diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_union2.png b/rust/kcl-lib/tests/outputs/serial_test_example_union2.png index 8ba68ea02e7..8e4e7e51208 100644 Binary files a/rust/kcl-lib/tests/outputs/serial_test_example_union2.png and b/rust/kcl-lib/tests/outputs/serial_test_example_union2.png differ diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_commands.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_commands.snap index 5fb6f5d8877..92b6e18cbc7 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_commands.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_commands.snap @@ -342,8 +342,8 @@ description: Artifact commands subtract_cylinder_from_cube.kcl "type": "move_path_pen", "path": "[uuid]", "to": { - "x": 2.0, - "y": 0.0, + "x": 4.0, + "y": 2.0, "z": 0.0 } } @@ -364,8 +364,8 @@ description: Artifact commands subtract_cylinder_from_cube.kcl "segment": { "type": "arc", "center": { - "x": 0.0, - "y": 0.0 + "x": 2.0, + "y": 2.0 }, "radius": 2.0, "start": { @@ -410,7 +410,7 @@ description: Artifact commands subtract_cylinder_from_cube.kcl "command": { "type": "extrude", "target": "[uuid]", - "distance": 10.0, + "distance": 5.0, "faces": null, "opposite": "None" } @@ -458,5 +458,19 @@ description: Artifact commands subtract_cylinder_from_cube.kcl "edge_id": "[uuid]", "face_id": "[uuid]" } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_subtract", + "target_ids": [ + "[uuid]" + ], + "tool_ids": [ + "[uuid]" + ], + "tolerance": 0.0000001 + } } ] diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md index aa72e4dfcc3..2ca151fdeb4 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/artifact_graph_flowchart.snap.md @@ -30,7 +30,7 @@ flowchart LR 21["SweepEdge Opposite"] 22["SweepEdge Adjacent"] 23["Plane
[363, 382, 0]"] - 27["Sweep Extrusion
[429, 449, 0]"] + 27["Sweep Extrusion
[429, 448, 0]"] 28[Wall] 29["Cap Start"] 30["Cap End"] diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap index 9660395bd20..91d3262ad67 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ast.snap @@ -876,24 +876,24 @@ description: Result of parsing subtract_cylinder_from_cube.kcl { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "2", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 2.0, "suffix": "None" } }, { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "2", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 2.0, "suffix": "None" } } @@ -963,12 +963,12 @@ description: Result of parsing subtract_cylinder_from_cube.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "10", + "raw": "5", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 10.0, + "value": 5.0, "suffix": "None" } } diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl b/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl index 4b1d8f1968c..d4cc93b07b3 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/input.kcl @@ -10,7 +10,7 @@ fn cube(center) { part001 = cube([0, 0]) part002 = startSketchOn('XY') - |> circle(center = [0, 0], radius = 2) - |> extrude(length = 10) + |> circle(center = [2, 2], radius = 2) + |> extrude(length = 5) fullPart = subtract([part001], tools=[part002]) diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap index 9284735bfd3..e7f8f4f9770 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/ops.snap @@ -88,7 +88,7 @@ description: Operations executed subtract_cylinder_from_cube.kcl "length": { "value": { "type": "Number", - "value": 10.0, + "value": 5.0, "ty": { "type": "Default", "len": { diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/program_memory.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/program_memory.snap index b3b34a0f554..c03b6bc8759 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/program_memory.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/program_memory.snap @@ -7,182 +7,365 @@ description: Variables in memory after executing subtract_cylinder_from_cube.kcl "type": "Function" }, "fullPart": { - "type": "Solid", - "value": { - "type": "Solid", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": [ - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", + "type": "HomArray", + "value": [ + { + "type": "Solid", + "value": { + "type": "Solid", "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - } - ], - "sketch": { - "type": "Sketch", - "id": "[uuid]", - "paths": [ - { - "__geoMeta": { + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - -10.0, - -10.0 - ], - "tag": null, - "to": [ - 10.0, - -10.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - 10.0, - -10.0 - ], - "tag": null, - "to": [ - 10.0, - 10.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - 10.0, - 10.0 - ], - "tag": null, - "to": [ - -10.0, - 10.0 + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } ], - "type": "ToPoint", + "on": { + "type": "plane", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": "XY", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "zAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "units": { + "type": "Mm" + } + }, + "start": { + "from": [ + -10.0, + -10.0 + ], + "to": [ + -10.0, + -10.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", "units": { "type": "Mm" } }, - { - "__geoMeta": { + "height": 10.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + } + } + }, + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - -10.0, - 10.0 - ], - "tag": null, - "to": [ - -10.0, - -10.0 + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } ], - "type": "ToPoint", + "on": { + "type": "plane", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": "XY", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "zAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "units": { + "type": "Mm" + } + }, + "start": { + "from": [ + -10.0, + -10.0 + ], + "to": [ + -10.0, + -10.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", "units": { "type": "Mm" } - } - ], - "on": { - "type": "plane", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": "XY", - "origin": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "xAxis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "yAxis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "zAxis": { - "x": 0.0, - "y": 0.0, - "z": 1.0 }, + "height": 10.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", "units": { "type": "Mm" } - }, - "start": { - "from": [ - -10.0, - -10.0 - ], - "to": [ - -10.0, - -10.0 - ], - "units": { - "type": "Mm" - }, - "tag": null, - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - } - }, - "artifactId": "[uuid]", - "originalId": "[uuid]", - "units": { - "type": "Mm" } - }, - "height": 10.0, - "startCapId": "[uuid]", - "endCapId": "[uuid]", - "units": { - "type": "Mm" } - } + ] }, "part001": { "type": "Solid", @@ -388,18 +571,18 @@ description: Variables in memory after executing subtract_cylinder_from_cube.kcl }, "ccw": true, "center": [ - 0.0, - 0.0 + 2.0, + 2.0 ], "from": [ - 2.0, - 0.0 + 4.0, + 2.0 ], "radius": 2.0, "tag": null, "to": [ - 2.0, - 0.0 + 4.0, + 2.0 ], "type": "Circle", "units": { @@ -438,12 +621,12 @@ description: Variables in memory after executing subtract_cylinder_from_cube.kcl }, "start": { "from": [ - 2.0, - 0.0 + 4.0, + 2.0 ], "to": [ - 2.0, - 0.0 + 4.0, + 2.0 ], "units": { "type": "Mm" @@ -460,7 +643,7 @@ description: Variables in memory after executing subtract_cylinder_from_cube.kcl "type": "Mm" } }, - "height": 10.0, + "height": 5.0, "startCapId": "[uuid]", "endCapId": "[uuid]", "units": { diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/rendered_model.png b/rust/kcl-lib/tests/subtract_cylinder_from_cube/rendered_model.png index 368339b2d83..65736ccfa29 100644 Binary files a/rust/kcl-lib/tests/subtract_cylinder_from_cube/rendered_model.png and b/rust/kcl-lib/tests/subtract_cylinder_from_cube/rendered_model.png differ diff --git a/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap b/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap index e8a240ed5e3..035e6ab4eb8 100644 --- a/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap +++ b/rust/kcl-lib/tests/subtract_cylinder_from_cube/unparsed.snap @@ -14,7 +14,7 @@ fn cube(center) { part001 = cube([0, 0]) part002 = startSketchOn(XY) - |> circle(center = [0, 0], radius = 2) - |> extrude(length = 10) + |> circle(center = [2, 2], radius = 2) + |> extrude(length = 5) fullPart = subtract([part001], tools = [part002]) diff --git a/rust/kcl-lib/tests/union_cubes/artifact_commands.snap b/rust/kcl-lib/tests/union_cubes/artifact_commands.snap index 34b30913ed4..45f1dfbd9f9 100644 --- a/rust/kcl-lib/tests/union_cubes/artifact_commands.snap +++ b/rust/kcl-lib/tests/union_cubes/artifact_commands.snap @@ -178,7 +178,7 @@ description: Artifact commands union_cubes.kcl "command": { "type": "extrude", "target": "[uuid]", - "distance": 10.0, + "distance": 20.0, "faces": null, "opposite": "None" } @@ -342,8 +342,8 @@ description: Artifact commands union_cubes.kcl "type": "move_path_pen", "path": "[uuid]", "to": { - "x": 10.0, - "y": 0.0, + "x": 2.0, + "y": -2.0, "z": 0.0 } } @@ -364,8 +364,8 @@ description: Artifact commands union_cubes.kcl "segment": { "type": "line", "end": { - "x": 30.0, - "y": 0.0, + "x": 12.0, + "y": -2.0, "z": 0.0 }, "relative": false @@ -381,8 +381,8 @@ description: Artifact commands union_cubes.kcl "segment": { "type": "line", "end": { - "x": 30.0, - "y": 20.0, + "x": 12.0, + "y": 8.0, "z": 0.0 }, "relative": false @@ -398,8 +398,8 @@ description: Artifact commands union_cubes.kcl "segment": { "type": "line", "end": { - "x": 10.0, - "y": 20.0, + "x": 2.0, + "y": 8.0, "z": 0.0 }, "relative": false @@ -544,5 +544,41 @@ description: Artifact commands union_cubes.kcl "edge_id": "[uuid]", "face_id": "[uuid]" } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "set_object_transform", + "object_id": "[uuid]", + "transforms": [ + { + "translate": { + "property": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "set": false, + "is_local": true + }, + "rotate_rpy": null, + "rotate_angle_axis": null, + "scale": null + } + ] + } + }, + { + "cmdId": "[uuid]", + "range": [], + "command": { + "type": "boolean_union", + "solid_ids": [ + "[uuid]", + "[uuid]" + ], + "tolerance": 0.0000001 + } } ] diff --git a/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md index 0acf8a42451..d94dcb7c60a 100644 --- a/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/union_cubes/artifact_graph_flowchart.snap.md @@ -1,23 +1,23 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[52, 103, 0]"] - 3["Segment
[111, 163, 0]"] - 4["Segment
[171, 223, 0]"] - 5["Segment
[231, 283, 0]"] - 6["Segment
[291, 298, 0]"] + 2["Path
[58, 113, 0]"] + 3["Segment
[121, 177, 0]"] + 4["Segment
[185, 241, 0]"] + 5["Segment
[249, 305, 0]"] + 6["Segment
[313, 320, 0]"] 7[Solid2d] end subgraph path24 [Path] - 24["Path
[52, 103, 0]"] - 25["Segment
[111, 163, 0]"] - 26["Segment
[171, 223, 0]"] - 27["Segment
[231, 283, 0]"] - 28["Segment
[291, 298, 0]"] + 24["Path
[58, 113, 0]"] + 25["Segment
[121, 177, 0]"] + 26["Segment
[185, 241, 0]"] + 27["Segment
[249, 305, 0]"] + 28["Segment
[313, 320, 0]"] 29[Solid2d] end - 1["Plane
[27, 44, 0]"] - 8["Sweep Extrusion
[306, 326, 0]"] + 1["Plane
[33, 50, 0]"] + 8["Sweep Extrusion
[328, 354, 0]"] 9[Wall] 10[Wall] 11[Wall] @@ -32,8 +32,8 @@ flowchart LR 20["SweepEdge Adjacent"] 21["SweepEdge Opposite"] 22["SweepEdge Adjacent"] - 23["Plane
[27, 44, 0]"] - 30["Sweep Extrusion
[306, 326, 0]"] + 23["Plane
[33, 50, 0]"] + 30["Sweep Extrusion
[328, 354, 0]"] 31[Wall] 32[Wall] 33[Wall] diff --git a/rust/kcl-lib/tests/union_cubes/ast.snap b/rust/kcl-lib/tests/union_cubes/ast.snap index 72a0ac042d9..c25d7956fb3 100644 --- a/rust/kcl-lib/tests/union_cubes/ast.snap +++ b/rust/kcl-lib/tests/union_cubes/ast.snap @@ -101,16 +101,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -149,16 +153,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -246,16 +254,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -294,16 +306,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -386,16 +402,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -434,16 +454,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -526,16 +550,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "-", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -574,16 +602,20 @@ description: Result of parsing union_cubes.kcl }, "operator": "+", "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "raw": "10", + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "Name", + "type": "Name" }, "start": 0, "type": "BinaryExpression", @@ -656,14 +688,38 @@ description: Result of parsing union_cubes.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "10", + "left": { + "commentStart": 0, + "end": 0, + "raw": "2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 2.0, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } + "type": "BinaryExpression", + "type": "BinaryExpression" } } ], @@ -719,6 +775,16 @@ description: Result of parsing union_cubes.kcl "start": 0, "type": "Identifier" } + }, + { + "type": "Parameter", + "identifier": { + "commentStart": 0, + "end": 0, + "name": "size", + "start": 0, + "type": "Identifier" + } } ], "start": 0, @@ -780,6 +846,18 @@ description: Result of parsing union_cubes.kcl "start": 0, "type": "ArrayExpression", "type": "ArrayExpression" + }, + { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } } ], "callee": { @@ -825,61 +903,129 @@ description: Result of parsing union_cubes.kcl "type": "Identifier" }, "init": { - "arguments": [ + "body": [ { - "commentStart": 0, - "elements": [ + "arguments": [ { "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "7", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 7.0, + "suffix": "None" + } + }, + { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + } + ], "end": 0, - "raw": "20", "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 20.0, - "suffix": "None" - } + "type": "ArrayExpression", + "type": "ArrayExpression" }, { "commentStart": 0, "end": 0, - "raw": "10", + "raw": "5", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 10.0, + "value": 5.0, "suffix": "None" } } ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "cube", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, "end": 0, "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "CallExpression", + "type": "CallExpression" + }, + { + "arguments": [ + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "z", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.0, + "suffix": "None" + } + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "translate", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, "commentStart": 0, "end": 0, - "name": "cube", "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null + } + ], "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "PipeExpression", + "type": "PipeExpression" }, "start": 0, "type": "VariableDeclarator" diff --git a/rust/kcl-lib/tests/union_cubes/input.kcl b/rust/kcl-lib/tests/union_cubes/input.kcl index f2652c05938..e79ab9fbf60 100644 --- a/rust/kcl-lib/tests/union_cubes/input.kcl +++ b/rust/kcl-lib/tests/union_cubes/input.kcl @@ -1,14 +1,15 @@ -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() - |> extrude(length = 10) + |> extrude(length = 2 * size) } -part001 = cube([0, 0]) -part002 = cube([20, 10]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) fullPart = union([part001, part002]) diff --git a/rust/kcl-lib/tests/union_cubes/ops.snap b/rust/kcl-lib/tests/union_cubes/ops.snap index 2554b6bb9da..388e0e6eed1 100644 --- a/rust/kcl-lib/tests/union_cubes/ops.snap +++ b/rust/kcl-lib/tests/union_cubes/ops.snap @@ -10,7 +10,7 @@ description: Operations executed union_cubes.kcl "name": "cube", "functionSourceRange": [ 7, - 328, + 356, 0 ], "unlabeledArg": null, @@ -38,7 +38,7 @@ description: Operations executed union_cubes.kcl "length": { "value": { "type": "Number", - "value": 10.0, + "value": 20.0, "ty": { "type": "Default", "len": { @@ -75,7 +75,7 @@ description: Operations executed union_cubes.kcl "name": "cube", "functionSourceRange": [ 7, - 328, + 356, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/union_cubes/program_memory.snap b/rust/kcl-lib/tests/union_cubes/program_memory.snap index 6bc15c2d279..4963a01981d 100644 --- a/rust/kcl-lib/tests/union_cubes/program_memory.snap +++ b/rust/kcl-lib/tests/union_cubes/program_memory.snap @@ -7,182 +7,365 @@ description: Variables in memory after executing union_cubes.kcl "type": "Function" }, "fullPart": { - "type": "Solid", - "value": { - "type": "Solid", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": [ - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", - "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - }, - { - "faceId": "[uuid]", + "type": "HomArray", + "value": [ + { + "type": "Solid", + "value": { + "type": "Solid", "id": "[uuid]", - "sourceRange": [], - "tag": null, - "type": "extrudePlane" - } - ], - "sketch": { - "type": "Sketch", - "id": "[uuid]", - "paths": [ - { - "__geoMeta": { + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - -10.0, - -10.0 - ], - "tag": null, - "to": [ - 10.0, - -10.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - 10.0, - -10.0 - ], - "tag": null, - "to": [ - 10.0, - 10.0 - ], - "type": "ToPoint", - "units": { - "type": "Mm" - } - }, - { - "__geoMeta": { + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - 10.0, - 10.0 - ], - "tag": null, - "to": [ - -10.0, - 10.0 + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } ], - "type": "ToPoint", + "on": { + "type": "plane", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": "XY", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "zAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "units": { + "type": "Mm" + } + }, + "start": { + "from": [ + -10.0, + -10.0 + ], + "to": [ + -10.0, + -10.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", "units": { "type": "Mm" } }, - { - "__geoMeta": { + "height": 20.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", + "units": { + "type": "Mm" + } + } + }, + { + "type": "Solid", + "value": { + "type": "Solid", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": [ + { + "faceId": "[uuid]", "id": "[uuid]", - "sourceRange": [] + "sourceRange": [], + "tag": null, + "type": "extrudePlane" }, - "from": [ - -10.0, - 10.0 - ], - "tag": null, - "to": [ - -10.0, - -10.0 + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + }, + { + "faceId": "[uuid]", + "id": "[uuid]", + "sourceRange": [], + "tag": null, + "type": "extrudePlane" + } + ], + "sketch": { + "type": "Sketch", + "id": "[uuid]", + "paths": [ + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + -10.0 + ], + "tag": null, + "to": [ + 10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + 10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + 10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + }, + { + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + }, + "from": [ + -10.0, + 10.0 + ], + "tag": null, + "to": [ + -10.0, + -10.0 + ], + "type": "ToPoint", + "units": { + "type": "Mm" + } + } ], - "type": "ToPoint", + "on": { + "type": "plane", + "id": "[uuid]", + "artifactId": "[uuid]", + "value": "XY", + "origin": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "xAxis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "yAxis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "zAxis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + }, + "units": { + "type": "Mm" + } + }, + "start": { + "from": [ + -10.0, + -10.0 + ], + "to": [ + -10.0, + -10.0 + ], + "units": { + "type": "Mm" + }, + "tag": null, + "__geoMeta": { + "id": "[uuid]", + "sourceRange": [] + } + }, + "artifactId": "[uuid]", + "originalId": "[uuid]", "units": { "type": "Mm" } - } - ], - "on": { - "type": "plane", - "id": "[uuid]", - "artifactId": "[uuid]", - "value": "XY", - "origin": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - }, - "xAxis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "yAxis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "zAxis": { - "x": 0.0, - "y": 0.0, - "z": 1.0 }, + "height": 20.0, + "startCapId": "[uuid]", + "endCapId": "[uuid]", "units": { "type": "Mm" } - }, - "start": { - "from": [ - -10.0, - -10.0 - ], - "to": [ - -10.0, - -10.0 - ], - "units": { - "type": "Mm" - }, - "tag": null, - "__geoMeta": { - "id": "[uuid]", - "sourceRange": [] - } - }, - "artifactId": "[uuid]", - "originalId": "[uuid]", - "units": { - "type": "Mm" } - }, - "height": 10.0, - "startCapId": "[uuid]", - "endCapId": "[uuid]", - "units": { - "type": "Mm" } - } + ] }, "part001": { "type": "Solid", @@ -354,7 +537,7 @@ description: Variables in memory after executing union_cubes.kcl "type": "Mm" } }, - "height": 10.0, + "height": 20.0, "startCapId": "[uuid]", "endCapId": "[uuid]", "units": { @@ -408,13 +591,13 @@ description: Variables in memory after executing union_cubes.kcl "sourceRange": [] }, "from": [ - 10.0, - 0.0 + 2.0, + -2.0 ], "tag": null, "to": [ - 30.0, - 0.0 + 12.0, + -2.0 ], "type": "ToPoint", "units": { @@ -427,13 +610,13 @@ description: Variables in memory after executing union_cubes.kcl "sourceRange": [] }, "from": [ - 30.0, - 0.0 + 12.0, + -2.0 ], "tag": null, "to": [ - 30.0, - 20.0 + 12.0, + 8.0 ], "type": "ToPoint", "units": { @@ -446,13 +629,13 @@ description: Variables in memory after executing union_cubes.kcl "sourceRange": [] }, "from": [ - 30.0, - 20.0 + 12.0, + 8.0 ], "tag": null, "to": [ - 10.0, - 20.0 + 2.0, + 8.0 ], "type": "ToPoint", "units": { @@ -465,13 +648,13 @@ description: Variables in memory after executing union_cubes.kcl "sourceRange": [] }, "from": [ - 10.0, - 20.0 + 2.0, + 8.0 ], "tag": null, "to": [ - 10.0, - 0.0 + 2.0, + -2.0 ], "type": "ToPoint", "units": { @@ -510,12 +693,12 @@ description: Variables in memory after executing union_cubes.kcl }, "start": { "from": [ - 10.0, - 0.0 + 2.0, + -2.0 ], "to": [ - 10.0, - 0.0 + 2.0, + -2.0 ], "units": { "type": "Mm" diff --git a/rust/kcl-lib/tests/union_cubes/rendered_model.png b/rust/kcl-lib/tests/union_cubes/rendered_model.png index 8ba68ea02e7..77132a6f320 100644 Binary files a/rust/kcl-lib/tests/union_cubes/rendered_model.png and b/rust/kcl-lib/tests/union_cubes/rendered_model.png differ diff --git a/rust/kcl-lib/tests/union_cubes/unparsed.snap b/rust/kcl-lib/tests/union_cubes/unparsed.snap index a8cd4385c4a..2a68bd83456 100644 --- a/rust/kcl-lib/tests/union_cubes/unparsed.snap +++ b/rust/kcl-lib/tests/union_cubes/unparsed.snap @@ -2,17 +2,18 @@ source: kcl-lib/src/simulation_tests.rs description: Result of unparsing union_cubes.kcl --- -fn cube(center) { +fn cube(center, size) { return startSketchOn(XY) - |> startProfileAt([center[0] - 10, center[1] - 10], %) - |> line(endAbsolute = [center[0] + 10, center[1] - 10]) - |> line(endAbsolute = [center[0] + 10, center[1] + 10]) - |> line(endAbsolute = [center[0] - 10, center[1] + 10]) + |> startProfileAt([center[0] - size, center[1] - size], %) + |> line(endAbsolute = [center[0] + size, center[1] - size]) + |> line(endAbsolute = [center[0] + size, center[1] + size]) + |> line(endAbsolute = [center[0] - size, center[1] + size]) |> close() - |> extrude(length = 10) + |> extrude(length = 2 * size) } -part001 = cube([0, 0]) -part002 = cube([20, 10]) +part001 = cube([0, 0], 10) +part002 = cube([7, 3], 5) + |> translate(z = 1) fullPart = union([part001, part002])