diff --git a/docs/kcl-std/intersect.md b/docs/kcl-std/functions/std-solid-intersect.md similarity index 99% rename from docs/kcl-std/intersect.md rename to docs/kcl-std/functions/std-solid-intersect.md index d2f83dde7..d697fbb93 100644 --- a/docs/kcl-std/intersect.md +++ b/docs/kcl-std/functions/std-solid-intersect.md @@ -1,31 +1,36 @@ --- title: "intersect" subtitle: "Function in std::solid" -excerpt: "Intersect returns the shared volume between multiple solids, preserving only overlapping regions." +excerpt: "" layout: manual --- -Intersect returns the shared volume between multiple solids, preserving only overlapping regions. + ```kcl intersect( - @solids: [Solid], - tolerance?: number, -): [Solid] + @solids: [Solid; 2+], + tolerance?: number(Length), +): [Solid; 1+] ``` -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. +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. ### Arguments | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl-std/types/std-types-Solid) | The solids to intersect. | Yes | -| `tolerance` | [`number`](/docs/kcl-std/types/std-types-number) | The tolerance to use for the intersection operation. | No | +| `solids` | `[Solid; 2+]` | The solids to intersect. | Yes | +| `tolerance` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The tolerance to use for the intersection operation. | No | ### Returns -[`[Solid]`](/docs/kcl-std/types/std-types-Solid) +[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) ### Examples @@ -33,20 +38,19 @@ Intersect computes the geometric intersection of multiple solid bodies, returnin ```kcl // Intersect two cubes using the stdlib functions. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> translate(z = 1) intersectedPart = intersect([part001, part002]) ``` @@ -58,20 +62,19 @@ intersectedPart = intersect([part001, part002]) // NOTE: This will not work when using codemods through the UI. // Codemods will generate the stdlib function call instead. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> translate(z = 1) // This is the equivalent of: intersect([part001, part002]) intersectedPart = part001 & part002 diff --git a/docs/kcl-std/patternCircular3d.md b/docs/kcl-std/functions/std-solid-patternCircular3d.md similarity index 99% rename from docs/kcl-std/patternCircular3d.md rename to docs/kcl-std/functions/std-solid-patternCircular3d.md index 021fa5c02..ee92be76f 100644 --- a/docs/kcl-std/patternCircular3d.md +++ b/docs/kcl-std/functions/std-solid-patternCircular3d.md @@ -1,48 +1,49 @@ --- title: "patternCircular3d" subtitle: "Function in std::solid" -excerpt: "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 orientation of the solid with respect to the center of the circle is maintained." +excerpt: "" layout: manual --- -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 orientation of the solid with respect to the center of the circle is maintained. + ```kcl patternCircular3d( - @solids: [Solid], - instances: number, - axis: [number], + @solids: [Solid; 1+], + instances: number(_), + axis: Axis3d | Point3d, center: Point3d, - arcDegrees?: number, + arcDegrees?: number(deg), rotateDuplicates?: bool, useOriginal?: bool, -): [Solid] +): [Solid; 1+] ``` - +Repeat a 3-dimensional solid some number of times along a partial or +complete circle some specified number of times. Each object mayadditionally be rotated along the circle, ensuring orientation of the +solid with respect to the center of the circle is maintained. ### Arguments | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl-std/types/std-types-Solid) | Which solid(s) to pattern | Yes | -| `instances` | [`number`](/docs/kcl-std/types/std-types-number) | 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. | Yes | -| `axis` | [`[number]`](/docs/kcl-std/types/std-types-number) | The axis around which to make the pattern. This is a 3D vector | Yes | +| `solids` | [`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) | The solid(s) to pattern. | Yes | +| `instances` | [`number(_)`](/docs/kcl-std/types/std-types-number) | 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. | Yes | +| `axis` | [`Axis3d`](/docs/kcl-std/types/std-types-Axis3d) or [`Point3d`](/docs/kcl-std/types/std-types-Point3d) | The axis of the pattern. A 3D vector. | Yes | | `center` | [`Point3d`](/docs/kcl-std/types/std-types-Point3d) | The center about which to make the pattern. This is a 3D vector. | Yes | -| `arcDegrees` | [`number`](/docs/kcl-std/types/std-types-number) | The arc angle (in degrees) to place the repetitions. Must be greater than 0. Defaults to 360. | No | -| `rotateDuplicates` | [`bool`](/docs/kcl-std/types/std-types-bool) | Whether or not to rotate the duplicates as they are copied. Defaults to true. | No | -| `useOriginal` | [`bool`](/docs/kcl-std/types/std-types-bool) | 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. | No | +| `arcDegrees` | [`number(deg)`](/docs/kcl-std/types/std-types-number) | "The arc angle to place the repetitions. Must be greater than 0. | No | +| `rotateDuplicates` | [`bool`](/docs/kcl-std/types/std-types-bool) | Whether or not to rotate the duplicates as they are copied. | No | +| `useOriginal` | [`bool`](/docs/kcl-std/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. | No | ### Returns -[`[Solid]`](/docs/kcl-std/types/std-types-Solid) +[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) ### Examples ```kcl -// / Pattern using a named axis. - +/// Pattern using a named axis. exampleSketch = startSketchOn(XZ) |> circle(center = [0, 0], radius = 1) @@ -53,15 +54,14 @@ example = extrude(exampleSketch, length = -5) center = [10, -20, 0], instances = 11, arcDegrees = 360, - rotateDuplicates = true, + rotateDuplicates = true ) ``` ![Rendered example of patternCircular3d 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAB0QUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+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+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX/Z90zTXXPBjgxV7sxV77zJkzD+K5nD179hkA9913363/8A//8NtcddVVV1111VVXXfV/EZWrrrrqqquuuuqqq/7PuOaaax782q/92u/1Tu/0Tp8NcN999916zTXXPJh/wX333Xfr2bNnb73vvvtu/a3f+q3v+Yd/+Iff5qqrrrrqqquuuuqq/wvQgx70IK666qqrrrrqqquu+t/vwz/8w7/rxV7sxV57d3f3wY985CO5dOkSkrj33nuZponNzU1msxmtNVarFaUUWmtsbGywtbXF1tYW58+f59SpU3z913/9+/zWb/3Wd3PVVVddddVVV1111f92VK666qqrrrrqqquu+l/vxV7sxV77vvvuY3t7+8H7+/v86Z/+KXfffTfz+ZzNzU1OnDjBNddcw87ODsMwcPHiRS5dusRqtaK1BsDW1hYPe9jDuP3223mv93qv77rvvvtu/Yd/+Iff5qqrrrrqqquuuuqq/82oXHXVVVddddVVV131v97Zs2dvvfbaa9/7R3/0R1ksFlxzzTW8+Iu/OF3XcerUKW6++WYyk+PHjwPQWuPg4ID9/X1sc88993BwcMDf/M3fYJuNjQ2uueaaB//DP/wDV1111VVXXXXVVVf9r0blqquuuuqqq6666qr/9e67775bH/e4x333G7zBG7z3G7zBG3C/ZzzjGezu7vK4xz0OgN3dXe53/Phxjh07xvHjx3m1V3s1AA4ODrjnnnvY2Njgqquuuuqqq6666qr/E6hcddVVV1111VVXXfW/3ju+4zt+1uu8zuu8dt/3/O7v/i6/+7u/y7/W8ePHueWWW3ipl3optre3OXPmzIO46qqrrrrqqquuuup/OypXXXXVVVddddVVV/2v9jqv8zrv/Tqv8zrv/Su/8isPfsYznsG/1e7uLru7u/zt3/4tD3rQg3ijN3qj9wb40R/90c/hqquuuuqqq6666qr/rahcddVVV1111VVXXfW/2ou92Iu91nK5fPAznvEM/qM84xnPYLlcPviaa655MFddddVVV1111VVX/W9GcNVVV1111VVXXXXV/2r33XffrceOHeM93uM9OH78OP9ex48f5z3e4z04duwYr/M6r/PeXHXVVVddddVVV131vxmVq6666qqrrrrqqqv+V/vt3/7t73mDN3iDzwZ493d/dy5dusTf/M3fcOnSJZ7xjGfwojh+/Dgv+ZIvyYMe9CAe9KAHsbu7S9d1XHXVVVddddVVV131vx6Vq6666qqrrrrqqqv+V7vvvvtu/fqv/3pe7dVejdd7vdfj+PHjADzoQQ8CYHd3F4BLly7x3B70oAdxv93dXY4fPw7APffcw9/+7d/yju/4jlx11VVXXXXVVVdd9b8alauuuuqqq6666qqr/te7ePEiv/Ebv8Hf//3f87CHPYwHP/jB3H777dx8880cP34cgOPHj7NarQCYz+c80OHhIdM0cccdd/D4xz+eo6MjFosFV1111VVXXXXVVVf9r0flqquuuuqqq6666qr/M3Z3d/nbv/1bHve4x1FrZbFYcM0117BYLDh58iR931NKoZTCbDaj6zq6rsM2h4eH7O7uctVVV1111VVXXXXV/ylUrrrqqquuuuqqq676X28YhlsXi8WDAWxzP9scHByQmWQm8/mcvu+ptbJYLNja2qLrOiTx/Nx33323ctVVV1111VVXXXXV/2ZUrrrqqquuuuqqq676X882ALZ5brZ5INtcddVVV1111VVXXfX/BsFVV1111VVXXXXVVf/n2eYFkcRVV1111VVXXXXVVf9nUbnqqquuuuqqq6666v8tSQBI4qqrrrrqqquuuuqq/5OoXHXVVVddddVVV131f4Jtrrrqqquuuuqqq6666rkQXHXVVVddddVVV131f45tnh/bPDdJAEjiqquuuuqqq6666qr/c6hcddVVV1111VVXXfX/gm2uuuqqq6666qqrrvp/h8pVV1111VVXXXXVVf/vSeKqq6666qqrrrrqqv+TqFx11VVXXXXVVVdd9X+SbZ4f29xPElddddVVV1111VVX/Z9GcNVVV1111VVXXXXV/3m2eUEkcdVVV1111VVXXXXV/1lUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV131f5ZtbHM/2zw/kpDEVVddddVVV1111VX/5xBcddVVV1111VVXXfX/gm0eSBKSkMRVV1111VVXXXXVVf9nUbnqqquuuuqqq6666n892/xHk8RVV1111VVXXXXVVf/rUbnqqquuuuqqq6666v89SVx11VVXXXXVVVdd9X8SwVVXXXXVVVddddVV/+tFBLb5t5DE/SRxv8ViwVVXXXXVVVddddVV/+tRueqqq6666qqrrrrq/xXbXHXVVVddddVVV131/wbBVVddddVVV1111VX/6w3DcCuAbWzzgtgGwDYAkrifJJ7b2bNnb+Wqq6666qqrrrrqqv/NqFx11VVXXXXVVVdd9b+ebV4Y27wwkrjqqquuuuqqq6666v8kgquuuuqqq6666qqr/l+wzfMjiauuuuqqq6666qqr/s+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqq/3Nscz/bvCCSuOqqq6666qqrrrrq/zQqV1111VVXXXXVVVf9n2Wbf4kkACRx1VVXXXXVVVddddX/OVSuuuqqq6666qqrrvo/yTbPzTb3k8RVV1111VVXXXXVVf/nUbnqqquuuuqqq6666v8V21x11VVXXXXVVVdd9f8Glauuuuqqq6666qqr/tezzb+FJCRx1VVXXXXVVVddddX/WVSuuuqqq6666qqrrvo/zza2ueqqq6666qqrrrrq/x0qV1111VVXXXXVVVf9n2Cbq6666qqrrrrqqquuei5Urrrqqquuuuqqq676X08S/1aSAJDEVVddddVVV1111VX/51C56qqrrrrqqquuuur/LUlcddVVV1111VVXXfV/GpWrrrrqqquuuuqqq/7Xs82LwjZXXXXVVVddddVVV/2/QnDVVVddddVVV1111f9ptnlhJHHVVVddddVVV1111f9ZVK666qqrrrrqqquu+j/DNv8Wkrjqqquuuuqqq6666v8kKlddddVVV1111VVX/a9nm3+JbQBsAyCJ5yaJ+21ubnLVVVddddVVV1111f96BFddddVVV1111VVX/a9XSuH5sQ2AbZ4fSUgCQBJXXXXVVVddddVVV/2fQ+Wqq6666qqrrrrqqv/1bHM/2/xrSeL5ue+++27lqquuuuqqq6666qr/zahcddVVV1111VVXXfW/3jiOt3LVVVddddVVV1111VXPi+Cqq6666qqrrrrqqv83bPPcJPH82Oaqq6666qqrrrrqqv/1qFx11VVXXXXVVVdd9X+ObWzzL5HEVVddddVVV1111VX/p1G56qqrrrrqqquuuur/BNv8W0niqquuuuqqq6666qr/kwiuuuqqq6666qqrrvpfzzb/Ets8P5IAkMRVV1111VVXXXXVVf/nULnqqquuuuqqq6666qrnYpurrrrqqquuuuqqq/5PoHLVVVddddVVV1111f9ptnkg29xPEgCSeCBJXHXVVVddddVVV131fwLBVVddddVVV1111VX/59nmuUkCQBLPzTZXXXXVVVddddVVV/2fQOWqq6666qqrrrrqqv/1bPOisM1VV1111VVXXXXVVf+vEFx11VVXXXXVVVdd9b/ai73Yi73267zO67w3V1111VVXXXXVVVdd9bwIrrrqqquuuuqqq676X+11Xud13osXwDYvjCQAJCGJq6666qqrrrrqqqv+zyG46qqrrrrqqquuuup/td/6rd/6nrd6q7cCwDb/WpJ4bpLY3t6+9bd+67e+h6uuuuqqq6666qqr/jejctVVV1111VVXXXXV/2pnz569tbV266d8yqc8+K/+6q+44447uPPOO3lutvmXzGYzHvawh3HmzBmWyyX/8A//8NtcddVVV1111VVXXfW/GXrQgx7EVVddddVVV1111VX/u11zzTUP/vAP//DverEXe7HXBrh06RIAd911F/fddx993zOOI33f03Uds9mM48ePc+zYMWazGaUUSins7++zvb3NP/zDP/z2Z37mZ74OV1111VVXXXXVVVf9b4ce9KAHcdVVV1111VVXXXXV/w3f9E3f9PRbb731wY94xCM4ceIEu7u7HD9+nBfF3t4ef/7nf87rvu7r8iEf8iEPue+++27lqquuuuqqq6666qr/7ahcddVVV1111VVXXfV/hu0H/+AP/iA33HADXdfxsIc9jIc85CGUUjh27BgHBwdsb2+Tmezu7nLx4kUyk7vuuot77rmH2WzGgx/84Fu56qqrrrrqqquuuur/CipXXXXVVVddddVVV/2fcM011zz47/7u724FHnzx4kX6vudv//ZvefzjH0/f98xmM0opZCbDMDAMA+M4Mk0Ts9mMvu8BOHPmzIPPnDnz4Pvuu+9Wrrrqqquuuuqqq676347gqquuuuqqq6666qr/E+67775b77vvvlt5PiRx1VVXXXXVVVddddX/SwRXXXXVVVddddVVV/2f8SM/8iOfw3ORxFVXXXXVVVddddVV/29Rueqqq6666qqrrrrq/xxJSOK5SeJfcnBwwFVXXXXVVVddddVV/2dQueqqq6666qqrrrrq/yxJvKgkAWCbq6666qqrrrrqqqv+z6By1VVXXXXVVVddddX/GZJ4UUjiqquuuuqqq6666qr/F6hcddVVV1111VVXXfV/iiReGElcddVVV1111VVXXfX/BpWrrrrqqquuuuqqq/5fkMQDSeL5kcRVV1111VVXXXXVVf9nULnqqquuuuqqq6666qoHsM1VV1111VVXXXXVVf9nULnqqquuuuqqq6666v8tSVx11VVXXXXVVVdd9X8alauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVX/b8hiecmiauuuuqqq6666qqr/s+ictVVV1111VVXXXXV/3mSeFFJ4qqrrrrqqquuuuqq/zOoXHXVVVddddVVV131f4Ykrrrqqquuuuqqq6666gGoXHXVVVddddVVV131/4okrrrqqquuuuqqq676f4PKVVddddVVV1111VX/p0jigSQBIImrrrrqqquuuuqqq/7foXLVVVddddVVV1111f85knhhJHHVVVddddVVV1111f8LVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVdd9X+G7QfzTJJ4bpK46qqrrrrqqquuuur/FYKrrrrqqquuuuqqq/7PkMQDSeLf4pprrnkwV1111VVXXXXVVVf9X0Dlqquuuuqqq6666qr/lyRx1VVXXXXVVVddddX/eVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXfV/niTuJ4kXZn9/n6uuuuqqq6666qqr/s+gctVVV1111VVXXXXV/xmSeEG2t7c5fvw4mck4jjz96U9HEs9NElddddVVV1111VVX/Z9B5aqrrrrqqquuuuqq/5OOHz/Oy77sy3LixAle/MVfnP39fQC2t7fZ29sDwDa/8zu/w+Mf/3juZ5urrrrqqquuuuqqq/7PoHLVVVddddVVV1111f8ZkpDEy77sy/J2b/d2PFApheVyyfnz51ksFmxsbADwlm/5lrzWa70Wj3/84/nLv/xLrrrqqquuuuqqq676P4XKVVddddVVV1111VX/p7zhG74hb/RGbwTA0dERT3rSk7jjjjt4bovFglOnTnHzzTdz6tQpHvvYx3J0dIQkrrrqqquuuuqqq676P4PKVVddddVVV1111VX/Z7zjO77jg97ojd4IgD/8wz/k/PnzAEjiuS2XS+644w7uuOMObr75Zl7qpV6K133d12V/f5+rrrrqqquuuuqqq/7PILjqqquuuuqqq6666v+M13md13lvgD/8wz/k/PnzvKhuv/12/viP/xiA7e1trrrqqquuuuqqq676P4Pgqquuuuqqq6666qr/E17ndV7nvQFuv/12zp8/z7/W+fPnOX/+PFddddVVV1111VVX/Z9CcNVVV1111VVXXXXV/3m2eVEsl0uuuuqqq6666qqrrvo/hcpVV1111VVXXXXVVf8n3Hfffbdec801Dz46OuLfwjanTp3iH/7hH377vvvuu5Wrrrrqqquuuuqqq/4voBw/fpyrrrrqqquuuuqqq/73k8Tm5ubxRz7ykS8NcP78eZ6bJF6QRz7ykVx33XVcc801D/76r//69+Gqq6666qqrrrrqqv8LCK666qqrrrrqqquu+j/hvvvuu/Uf/uEffgfg5ptv5pGPfCQvqlOnTvHIRz4SgM/8zM98Ha666qqrrrrqqquu+r+CylVXXXXVVVddddVV/2f81m/91nefOXPmQe/0Tu/02Y961KPY2Njg6OiI06dPs1gseKDlcsn58+c5deoUp06dAuDrv/7r3+cf/uEffpurrrrqqquuuuqqq/6voBw/fpyrrrrqqquuuuqqq/7v+Id/+Iffueaaax78kIc85KWPHTvG6dOnAdjY2KDrOrquo+s6NjY2OHXqFBsbGwD81m/91nf/6I/+6Odw1VVXXXXVVVddddX/JZTjx49z1VVXXXXVVVddddX/DS/2Yi/22t/8zd/89M3NzeObm5vHx3HkwoUL7O7usru7y9mzZ7lw4QIXLlxgvV7TWqO1Rt/3POQhD3npF3/xF3/tM2fOPPgf/uEffoerrrrqqquuuuqqq/4voBw/fpyrrrrqqquuuuqqq/73e8d3fMfP+oiP+IjvBuj7/vi9997LXXfdxdHREeM4Mo4jmUlmkpmsViv29/e5dOkSh4eHdF3HjTfe+OAXf/EXf+2zZ88+49Zbb/1rrrrqqquuuuqqq676345y/Phxrrrqqquuuuqqq6763+11Xud13vvN3/zNP3pzc/P42bNnueOOO1iv10hCEpJ4YcZx5OjoiMxkc3OTV3zFV3xrgH/4h3/4Ha666qqrrrrqqquu+t+Mcvz4ca666qqrrrrqqquu+t/rxV7sxV77kz7pk35qc3Pz+DOe8QwuXbrE8yMJSUhCEs8tMzk6OmIcR7a3t3nxF3/x1z579uwzbr311r/mqquuuuqqq6666qr/rSjHjx/nqquuuuqqq6666qr/vb75m7/56QC33XYby+WSF5UkJCGJB1qtVozjyPb2Npubm8d/67d+63u46qqrrrrqqquuuup/K8rx48e56qqrrrrqqquuuup/p3d8x3f8rBd/8Rd/7aOjI86dOweAJCQhCUm8KCQhCUkArFYrNjY2uOaaax4cEfzDP/zD73DVVVddddVVV1111f9GBFddddVVV1111VVX/a/1Oq/zOu8NcO7cOV4QSUhCEi8KSUji3LlzdF3H67zO67w3V1111VVXXXXVVVf9b0Vw1VVXXXXVVVddddX/Wtdcc82DAY6OjnhRSEISkviXHB0dcXR0BMCLvdiLvTZXXXXVVVddddVVV/1vROWqq6666qqrrrrqqv+VXud1Xue9AS5duoQkHsg2/xJJPJBtrrrqqquuuuqqq676P4fgqquuuuqqq6666qr/cyQhCUm8qCQhCUncbxxHrrnmmgdfc801D+aqq6666qqrrrrqqv+NqFx11VVXXXXVVVdd9b9a13W8MJJ4INv8SyRx1VVXXXXVVVddddX/CQRXXXXVVVddddVVV/2vdN99991633333dp1HZJ4UUlCEpL4l2xsbHDVVVddddVVV1111f9qVK666qqrrrrqqquu+l/p7Nmzt15zzTUPBlgsFiyXSx7INv8SSdzPNs+t6zquuuqqq6666qqrrvpfjeCqq6666qqrrrrqqv+V7rvvvlv/4R/+4bcBjh07xnOThCQk8aKQhCQkAXD99dcDsL+/z1VXXXXVVVddddVV/2sRXHXVVVddddVVV131v9bXfd3XfQ7AYrFgsVjwgkhCEpJ4UWxubnLs2DHud999993KVVddddVVV1111VX/GxFcddVVV1111VVXXfW/1n333cfP/dzP0XUd1113HV3X8S+RhCQk8fx0XcepU6cAuOOOO9jf3+eqq6666qqrrrrqqv+1CK666qqrrrrqqquu+l/tD//wD3nyk59M13XcdNNN9H2PJF4UkpCEJCTRdR3XXXcdGxsb7O7u8td//dfY5qqrrrrqqquuuuqq/7UIrrrqqquuuuqqq676X+3cuXN8//d/PxcuXKDrOm688UZOnjyJJCQhCUn8S06dOsVDH/pQuq5jvV7zl3/5l1x11VVXXXXVVVdd9b8elauuuuqqq6666qqr/teSBMCFCxf4xm/8Rl7plV6JN3iDN+DUqVPs7Oywt7fHcrlkuVwiifvZBqDrOnZ2djh16hT3Ozo64olPfCIAtslMzp49eytXXXXVVVddddVVV/1vROWqq6666qqrrrrqqv+1bN9qG4ALFy7wa7/2a9xzzz289mu/NjfffDOnTp0CYBxHAKZp4n6LxYIHaq1x4cIFzp07xwMdP36cq6666qqrrrrqqqv+16Jy1VVXXXXVVVddddX/WpJ4INs84xnP4Ed/9Ec5c+YMr/zKr8zOzg7XXXcdAF3X8UDDMHB4eMg4jthmGAauuuqqq6666qqrrvo/hcpVV1111VVXXXXVVf/r2cY2ALYB2N/f53d+53fo+57jx4/TdR3Hjh2j1krXdQzDwObmJltbW8zncyKC+9nGNgCZyVVXXXXVVVddddVV/2tRueqqq6666qqrrrrq/7zDw0O6rmMcR/q+ZzabsbGxwVVXXXXVVVddddVV/+dRueqqq6666qqrrrrqfzXb3M82/1q2uZ9tbPNA4zhy1VVXXXXVVVddddX/WlSuuuqqq6666qqrrvpfSxLPzTb/FrZ5fk6fPs199913K1ddddVVV1111VVX/W9E5aqrrrrqqquuuuqq/7Vs3wpgG9vczza2eW62uZ9tXhDbANjmqquuuuqqq6666qr/1Qiuuuqqq6666qqrrvpfzTb/Xra5n20AbHPVVVddddVVV1111f96VK666qqrrrrqqquu+l8tInhhbPNAtrmfbR7INlddddVVV1111VVX/Z9C5aqrrrrqqquuuuqq/9UykweyzVVXXXXVVVddddVVVz0TwVVXXXXVVVddddVV/6u11m61DYBtHsg2Lyrb3M82AKUUrrrqqquuuuqqq676X43KVVddddVVV1111VX/J9jmfrZ5INu8KGxjm/v1fc999913K1ddddVVV1111VVX/W9FcNVVV1111VVXXXXV/2q2eSDbANjmRWEb2zw321x11VVXXXXVVVdd9b8elauuuuqqq6666qqr/leThG3+M9jmqquuuuqqq6666qr/1ahcddVVV1111VVXXfW/mm1eFLZ5YWwDYBvbAJRSuOqqq6666qqrrrrqfzWCq6666qqrrrrqqqv+V2ut3coz2cY2/1a2eaC+7zl79uytXHXVVVddddVVV131vxWVq6666qqrrrrqqqv+T7DN/WzzwtjmX2Kbq6666qqrrrrqqqv+16Ny1VVXXXXVVVddddX/era56qqrrrrqqquuuuqq54Pgqquuuuqqq6666qr/1c6cOfNgHsA2ALaxjW3+JbaxDYBtbANgm6uuuuqqq6666qqr/lcjuOqqq6666qqrrrrqf63XeZ3Xee9rrrnmwfwb2MY2trmfbR4oIrjqqquuuuqqq6666n81gquuuuqqq6666qqr/tc6c+bMg2wDYBvbANjmP8J8Pue+++67lauuuuqqq6666qqr/rciuOqqq6666qqrrrrqf7XTp09jmxeFbV5Utrnqqquuuuqqq6666n89gquuuuqqq6666qqr/te65pprHsxzsc1zs82/xDa2sY1tAGxz1VVXXXXVVVddddX/alSuuuqqq6666qqrrvpf67777rv19OnT/Gc5PDy8lauuuuqqq6666qqr/jcjuOqqq6666qqrrrrqf63f/u3f/p7HPOYx2OZ+tgGwzfNjm+dmm+fnxV7sxR78D//wD7/DVVddddVVV1111VX/WxFcddVVV1111VVXXfW/2pkzZ3jkIx+JbWwDYBsA2/xr2eZ+Z86c4R/+4R9+m6uuuuqqq6666qqr/rciuOqqq6666qqrrrrqf6377rvv1t/8zd/87Fd91VflP4Jt7vfiL/7i/NZv/dZ333fffbdy1VVXXXXVVVddddX/VgRXXXXVVVddddVVV/2v9qM/+qOf86qv+qq88iu/MgC2eSDbANjm+bENgG3ut7Ozw4033siP/uiPfg5XXXXVVVddddVVV/1vRjl+/DhXXXXVVVddddVVV/3vdvbs2We8+qu/+kvv7u4ePzg4YDab0XUdtVZKKZRSKKVQSqGUQq2Vruvo+56u66i1AtBao+97HvOYx/CZn/mZr3Prrbf+NVddddVVV1111VVX/W9GOX78OFddddVVV1111VVX/e926623/vXp06ePv/Vbv/VrLxYL7rzzTrquo9ZKKYVSCqUUSimUUqi10nUdfd/TdR21VgA2Nja45ZZb+K3f+q3v/oVf+IWv4aqrrrrqqquuuuqq/+0ox48f56qrrrrqqquuuuqq//3+4R/+4XcWiwVv8RZv8dov+ZIvydmzZzk6OqKUQimFUgqlFEop1Frpuo6u6+j7ntlsxpkzZzh27Bg/8iM/8tnf9V3f9TFcddVVV1111VVXXfV/AXrQgx7EVVddddVVV1111VX/d1xzzTUP/vAP//DvOnPmzIMXi8WDn/KUp3Du3DnW6zXjONL3PcePH+fYsWOcPn2arus4deoUv/Vbv/XdP/qjP/o59913361cddVVV1111VVXXfV/BZWrrrrqqquuuuqqq/5Pue+++279kR/5kc/53M/93N/6sz/7M06ePMnLvMzL8Pw89alP5cKFC7TWbv2Hf/iH37nvvvtu5aqrrrrqqquuuuqq/0uoXHXVVVddddVVV131f8o111zz4Hd6p3f6rK//+q/n1ltvpZSCJB72sIdx8eJFTpw4gW2e+tSnkpm01rj55psf/IZv+Ibvdd999936D//wD7/NVVddddVVV1111VX/VxBcddVVV1111VVXXfV/ymu/9mu/1/7+/ms/9alP5YGe9rSncfHiRZ72tKfxtKc9jQe67bbbaK299ju90zt9FlddddVVV1111VVX/V9CcNVVV1111VVXXXXV/ynv9E7v9Nm/+Iu/yPMjiRfk937v93ixF3ux136xF3ux1+aqq6666qqrrrrqqv8rCK666qqrrrrqqquu+j/jxV7sxV77d3/3dzl//jwAknh+JPFAttnd3eWuu+7immuueTBXXXXVVVddddVVV/1fQeWqq6666qqrrrrqqv8zXuzFXuy1zp49y3OTxIvi7rvv5qqrrrrqqquuuuqq/1MIrrrqqquuuuqqq676P0USz48kACTx3GxjG4AzZ848iKuuuuqqq6666qqr/q8guOqqq6666qqrrrrq/4zf/u3f/p5z584hiauuuuqqq6666qqrrgKoXHXVVVddddVVV131f5IkXhhJAEjifvv7+1xzzTUP5qqrrrrqqquuuuqq/ysIrrrqqquuuuqqq676P+O+++679R/+4R9+mxeRJB7INlddddVVV1111VVX/Z9CcNVVV1111VVXXXXV/ynnzp27lQeQBMCJEyc4ceIEJ06c4Kqrrrrqqquuuuqq/zeoXHXVVVddddVVV131f44kAE6cOMErvuIr8tCHPpSHPvSh3O9pT3saAE996lP55V/+Za666qqrrrrqqquu+j+LylVXXXXVVVddddVV/yc97GEP48M+7MO4ePEiJ06cAODo6AiAhz70oQA89KEP5eVe7uX4kz/5E/78z/8c20jiqquuuuqqq6666qr/M6hcddVVV1111VVXXfV/SinlwY94xCN4ozd6IwBaa/zBH/wB586d434bGxtsbGxw8803c8stt/BKr/RKbGxscPHiRR7xiEc8mKuuuuqqq6666qqr/q+gctVVV1111VVXXXXV/ymPetSj+MiP/EgAnvCEJ/DEJz6R53Z0dMTR0RHnzp3j6OiIRz/60bzWa70Wj3/848lMrrrqqquuuuqqq676P4Pgqquuuuqqq6666qr/U972bd/2wQBPeMITeOITn8i/5IlPfCJ/9Vd/BcBjHvMYrrrqqquuuuqqq676P4Xgqquuuuqqq6666qr/M17ndV7nvSPiwefOneOJT3wiL6rbbruNc+fOcdVVV1111VVXXXXV/zkEV1111VVXXXXVVVf9n/FiL/Zir/WoRz2K2267jX+t22+/nauuuuqqq6666qqr/s8huOqqq6666qqrrrrq/5xz585hm3+No6MjAM6cOfNgrrrqqquuuuqqq676v4Lgqquuuuqqq6666qr/M6655poHA2xsbABgmxfV0dERAGfPnr2Vq6666qqrrrrqqqv+ryC46qqrrrrqqquuuur/NNu8KE6fPg3Ab/3Wb30PV1111VVXXXXVVVf9X0Fw1VVXXXXVVVddddX/GX//93//2wCPfvSjeSDb/EtOnTrFVVddddVVV1111VX/5xBcddVVV1111VVXXfV/xm//9m9/z3333XfrxsYGp0+f5oFs84KcPn2aW265BYB/+Id/+G2uuuqqq6666qqrrvq/gnL8+HGuuuqqq6666qqrrvq/4fDwcPfo6OjSIx7xiJd+0IMedPzuu+9mHEceSBIPtLGxwWu/9msD8CM/8iOf/ad/+qc/w1VXXXXVVVddddVV/1dQjh8/zlVXXXXVVVddddVV/3ccHR3tXnPNNQ++6aabXvqWW26h6zrOnTvHA0kC4FGPehSv9EqvBMBv/dZvffd3fdd3fQxXXXXVVVddddVVV/1fQjl+/DhXXXXVVVddddVVV/3fcXh4uHvrrbf+zTAMuy/zMi/z2qdPn+aWW27h2LFjHDt2jNOnT3P69Gle/dVfndOnTwPwD//wD7/9JV/yJW/DVVddddVVV1111VX/16AHPehBXHXVVVddddVVV131f9M111zz4A//8A//rhd7sRd7bZ7LfffddyvAj/7oj37Ob/3Wb303V1111VVXXXXVVVf9X4Qe9KAHcdVVV1111VVXXXXV/23XXHPNg8+cOfPga6655sFnzpx50NmzZ5/xD//wD79933333cpVV1111VVXXXXVVf+XoQc96EFcddVVV1111VVXXXXVVVddddVVV1111VX/J1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+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/FZWrrrrqqquuuuqqq/7Pu+aaax78Yi/2Yq8NcObMmQf9wz/8w+8A/MM//MNvc9VVV1111VVXXXXV/2XoQQ96EFddddVVV1111VVX/d/0Yi/2Yq/9Tu/0Tp/1Yi/2Yq/NM9133323XnPNNQ8+e/bsM2z767/+69/nH/7hH36bq6666qqrrrrqqqv+L6IcP36cq6666qqrrrrqqqv+73md13md936f93mfr3rQgx700rYZhoFhGOj7/nhmsrOzc3xzc/P4i73Yi7325ubm8X/4h3/4Ha666qqrrrrqqquu+r8GPehBD+Kqq6666qqrrrrqqv9bPvdzP/e3XuzFXuy1AY6Ojlgulzy3iGA2m7GxsQHAb/3Wb33313/9178PV1111VVXXXXVVVf9X0I5fvw4V1111VVXXXXVVVf93/FiL/Zir/VO7/ROnw2wt7fHMAxIQhKSkIQkbDNNE+v1msViwebm5vGjo6NLt956619z1VVXXXXVVVddddX/FQRXXXXVVVddddVVV/2f8uEf/uHfnZns7e0xTRMviCQkYZvDw0OuueaaB7/TO73TZ3PVVVddddVVV1111f8lBFddddVVV1111VVX/Z/xOq/zOu99zTXXPLi1xjRNvKjW6zXjOHLmzJkHvdiLvdhrc9VVV1111VVXXXXV/xVUrrrqqquuuuqqq676P+PFXuzFXgtgmiYk8S+xzf2maWJ3d/cZXHXVVVddddVVV131fwnBVVddddVVV1111VX/52QmLwpJSEIS0zRx5syZB73O67zOe3HVVVddddVVV1111f8VVK666qqrrrrqqquu+j/jmmuueTBAZvKvFRFcddVVV1111VVXXfV/DsFVV1111VVXXXXVVf9n3HfffbcCdF2HJCQhCUlIQhKSkIQkrrrqqquuuuqqq676P4/gqquuuuqqq6666qr/M37rt37rewBqrdwvIpjP52xsbLC1tcXW1hYbGxtsbGzQdR2SkMRsNgPgvvvuu5Wrrrrqqquuuuqqq/6voHLVVVddddVVV1111f8Z11xzzYMBaq1sbGzQ9z0XL17kcY97HBcvXmR3dxfbADzkIQ/hoQ99KMeOHWOaJmqtAJw9e/YZXHXVVVddddVVV131fwWVq6666qqrrrrqqqv+T7rjjjv4jd/4DZ7+9KcDIIn72eYv//Ivsc3x48d5vdd7PV7+5V+eq6666qqrrrrqqqv+z6Fy1VVXXXXVVVddddX/GS/2Yi/2WhcvXuRHf/RHefrTn44kJCGJF+TixYv86I/+KL/yK7/Ch3zIh3DVVVddddVVV1111f8plOPHj3PVVVddddVVV1111f9+H/7hH/5dL/VSL/XeX/RFX8Tu7i4RgSQAJPFAknhuy+WSv/3bv+X93u/93vrg4OAZt956619z1VVXXXXVVVddddX/dpTjx49z1VVXXXXVVVddddX/bq/zOq/z3m/wBm/w2V/wBV+AJCQhCUlI4kVhm+Vyyd/8zd/wAR/wAW89n8/5h3/4h9/hqquuuuqqq6666qr/zSjHjx/nqquuuuqqq6666qr/va655poHf/iHf/h3/fAP//Dx3d1dIoKIQBKSkASAJCQhCQBJ3M82trHN0dERT33qU3nrt37rB996661/c/bs2Vu56qqrrrrqqquuuup/K4Krrrrqqquuuuqqq/5Xe8d3fMfP+rM/+7MHP+UpT0ESz48k/iWSuN/Fixd58pOf/ODXeZ3XeS+uuuqqq6666qqrrvrfjOCqq6666qqrrrrqqv/VXud1Xue9/+RP/gRJPJAkJPH8SOKBJAEgCUnY5u/+7u94sRd7sde+5pprHsxVV1111VVXXXXVVf9bEVx11VVXXXXVVVdd9b/Wi73Yi732T/3UT9164cIF7ieJB5LEv5ZtLl26xDRND37t137t9+Kqq6666qqrrrrqqv+tCK666qqrrrrqqquu+l/rdV7ndd7rwoULD+aZJAEgiecmCUlIAkASkpAEgCTuZxvb/Pmf/zmSxFVXXXXVVVddddVV/1sRXHXVVVddddVVV131v9aLvdiLvfaTn/xkJCGJF+TEiRO8zMu8DC/zMi/Dy7zMy/AyL/MyPOQhD+F+kgCQhCRsYxvbvM7rvM57c9VVV1111VVXXXXV/1ZUrrrqqquuuuqqq676X+u+++67VdKDeQBJAJw8eZKXfdmX5XVf93V5QS5evMjTn/50nva0p/Fnf/Zn3M82ttnb2+O+++67lauuuuqqq6666qqr/reictVVV1111VVXXXXV/1rXXHPNgy9cuMBsNkMSknjoQx/K67/+6/PQhz6U+7XWGMeRByqlcOLECU6cOMHLvuzL8nqv93r8yI/8CE9+8pOxjW0yk2uuuebBXHXVVVddddVVV131vxWVq6666qqrrrrqqqv+17rvvvtuBR4sCYA3eIM34A3e4A0AaK2xWq04OjriBSmlMJvNmM/nnDhxgg/+4A/mV37lV/j1X/91bHPp0iXOnDnzIK666qqrrrrqqquu+t+KylVXXXXVVVddddVV/2vde++9SALgQz/0Q3nYwx4GwOHhIUdHR/xLWmscHR2xXq+ZzWZsbm7yRm/0Rpw8eZJf+ZVfwTaHh4dcc801D77vvvtu5aqrrrrqqquuuuqq/22oXHXVVVddddVVV131v9aP/uiPfrak3/6Ij/gIHvawhwFw8eJFxnHkX2OaJqZpYrVacerUKV7hFV6Bvu/57d/+bQ4PD7nqqquuuuqqq6666n8tgquuuuqqq6666qqr/te67777eNVXfVVOnjwJwMWLFxnHkX+r1hrnz58H4KVe6qV4zGMeQ2Zy5syZB3PVVVddddVVV1111f9GVK666qqrrrrqqquu+t/swa/yKq/CyZMnuXjxIsMw8O81TRN7e3vs7Ozwyq/8ykjiqquuuuqqq6666qr/tQiuuuqqq6666qqrrvpf6yM/8iNf+xGPeATDMDAMA/9RlsslwzCws7PD9vY211xzzYO56qqrrrrqqquuuup/I4Krrrrqqquuuuqqq/7XerEXe7HXBjg4OMA2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW0uXbrE/c6cOfMgrrrqqquuuuqqq67634jgqquuuuqqq6666qr/lV7ndV7nva+55poHt9YYhoH/aK01hmHgqquuuuqqq6666qr/1ahcddVVV1111VVXXfW/0pkzZx4EMAwDtvnPsF6v6fueq6666qqrrrrqqqv+1yK46qqrrrrqqquuuup/pWuuuebBAOv1mv8swzAA8OIv/uKvzVVXXXXVVVddddVV/xtRueqqq6666qqrrrrqf6VrrrnmwQDTNGGb/wy2ueqqq6666qqrrrrqfzUqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq676X882/xlKKQD8/d///W9z1VVXXXXVVVddddX/RgRXXXXVVVddddVVV/2v9Pd///e/DdD3Pf9ZSikAXHPNNQ/mqquuuuqqq6666qr/jahcddVVV1111VVXXfW/0j/8wz/8DsBsNmNvb4//DLPZDIDf+q3f+h6uuuqqq6666qqrrvrfiOCqq6666qqrrrrqqv+Vzp49e+vZs2efMZvNmM1m/EcrpTCbzbjvvvtu/Yd/+Iff5qqrrrrqqquuuuqq/40Irrrqqquuuuqqq676X+m+++679e///u9/C2BjYwPb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNrbZ2dkB4Ld/+7e/h6uuuuqqq6666qqr/rciuOqqq6666qqrrrrqf62v//qvfx+Azc1NZrMZ/1Fmsxmbm5sA/NZv/dZ3c9VVV1111VVXXXXV/1aU48ePc9VVV1111VVXXXXV/27XXHPNg0+ePHl8uVySmfx71Fq57rrrAPiRH/mRz/7TP/3Tn+Gqq6666qqrrrrqqv+tCK666qqrrrrqqquu+l/tt3/7t7/n7Nmzt9Zaueaaa6i18m9Va+XkyZMA/MM//MNv/+iP/ujncNVVV1111VVXXXXV/2aU48ePc9VVV1111VVXXXXV/16Hh4e7//AP//A7D3nIQ176uuuue/BisUASq9WKf435fM71119PrZV/+Id/+O3P/MzPfB2uuuqqq6666qqrrvrfjnL8+HGuuuqqq6666qqrrvrf7fDwcPcf/uEffufw8HD3JV/yJV97Pp+ztbWFbYZh4IWptXLmzBmOHz8OwD/8wz/89md+5me+DlddddVVV1111VVX/V+AHvSgB3HVVVddddVVV1111f8d7/iO7/hZ7/RO7/TZPNM0TaxWKwBWqxW1VgDm8znz+Zz73Xfffbd+/dd//fv8wz/8w29z1VVXXXXVVVddddX/FehBD3oQV1111VVXXXXVVVf933LNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVemxfivvvuu/W3fuu3vvtHf/RHP4errrrqqquuuuqqq/6vQQ960IO46qqrrrrqqquuuur/rmuuuebBL/ZiL/ZaZ86cefA111zz4Pvuu+9WgLNnz976D//wD79z33333cpVV1111VVXXXXVVf9XoQc96EFcddVVV1111VVXXXXVVVddddVVV1111VX/J1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+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/9Pe8R3f8bMArrnmmge/2Iu92GufPXv21jNnzjz4H/7hH37nH/7hH377t37rt76bq6666qqrrrrqqqv+r0IPetCDuOqqq6666qqrrrrq/54Xe7EXe+0P//AP/65rrrnmwbwA9913361nz5699bd+67e+57d+67e+m6uuuuqqq6666qqr/q+hctVVV1111VVXXXXV/zkf/uEf/l2v8zqv894A+/v7PPnJT+buu+/m7rvvZmtrC4Drr7+eRz7ykQ9+sRd7sQe/2Iu92GsD/NZv/dZ3c9VVV1111VVXXXXV/yWU48ePc9VVV1111VVXXXXV/x3v+I7v+Fmv+Iqv+Nabm5vH//Iv/5Lf+I3f4J577uHg4ACAYRgYhoELFy7w5Cc/GYDrr7+eBz/4wS+9tbV14h/+4R9+m6uuuuqqq6666qqr/q+gHD9+nKuuuuqqq6666qqr/m94sRd7sdd+53d+58+55pprHvyLv/iLPPnJT+aBJCEJSUhCEvfccw/33HMPL/3SL338mmuuecjTn/70vz579uytXHXVVVddddVVV131fwHBVVddddVVV1111VX/Z7zO67zOe505c+ZBT37yk7n77rt5Ud199908+clP5syZMw96ndd5nffiqquuuuqqq6666qr/Kwiuuuqqq6666qqrrvo/47777rsV4C//8i/51/rLv/xLAF7sxV7stbnqqquuuuqqq6666v8KKlddddVVV1111VVX/Z/xTu/0Tp8NcHBwwL/WwcEBANdcc82Dueqqq6666qqrrrrq/wqCq6666qqrrrrqqqv+z/iHf/iH3+aqq6666qqrrrrqqquejeCqq6666qqrrrrqqv9ztra2+Nd6xCMewVVXXXXVVVddddVV/+cQXHXVVVddddVVV131f8Zv/dZvfQ/Am73ZmyEJSUhCEpKQhCQk8dwe8YhHsF6vueqqq6666qqrrrrq/xSCq6666qqrrrrqqqv+z/it3/qt7z537hxbW1u8xmu8Bi+MJCQhidd8zdfk+uuv5+joiKuuuuqqq6666qqr/k8huOqqq6666qqrrrrq/5Qv+IIvAOARj3gE7/iO78h1113HC7K1tcWbvMmb8IhHPIJhGHjiE5/IVVddddVVV1111VX/p1C56qqrrrrqqquuuur/lPPnz/NJn/RJvO/7vi+PetSjeNM3fVMODg64++67OTg44H6PeMQj2NraAqC1xm233cZyueSqq6666qqrrrrqqv9TqFx11VVXXXXVVVdd9X+Kbc6dO8d3f/d38zqv8zq84Ru+IVtbWzziEY/gubXWGIaBixcvcnBwwFVXXXXVVVddddVV/+dQueqqq6666qqrrrrq/6Tz58/zq7/6qzzlKU/h+uuv5/Tp0/R9z/Hjx1mtVmxvb7OxscHGxgYAtqm1ctVVV1111VVXXXXV/ylUrrrqqquuuuqqq676P0UStrnfpUuXyEwuXrzIxsYGm5ubbG9vExFsbGxgm/tFBFddddVVV1111VVX/Z9CcNVVV1111VVXXXXV/ymttVt5Jtv8a9jmvvvuu5Wrrrrqqquuuuqqq/6voHLVVVddddVVV1111f9JtvmX2AbANlddddVVV1111VVX/Z9E5aqrrrrqqquuuuqq/9dsA2Cbq6666qqrrrrqqqv+z6Fy1VVXXXXVVVddddX/Kba5n21sc9VVV1111VVXXXXV/1tUrrrqqquuuuqqq676f882V1111VVXXXXVVVf9n0Tlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VX/59jmRWEb29xPElddddVVV1111VVX/Z9C5aqrrrrqqquuuuqq//Ns89xs80C2KaVw1VVXXXXVVVddddX/KVSuuuqqq6666qqrrvo/RRL3s82LwjYAtVauuuqqq6666qqrrvo/heCqq6666qqrrrrqqv9TTp06xb/H2bNnb+Wqq6666qqrrrrqqv8rCK666qqrrrrqqquu+j/jdV7ndd77mmuueTCAbV4Utrnqqquuuuqqq6666v8sgquuuuqqq6666qqr/s84c+bMg3gutnlR2eaqq6666qqrrrrqqv9TqFx11VVXXXXVVVdd9X+Kbe5nmxfGNgC2sQ3AfffddytXXXXVVVddddVVV/1fQXDVVVddddVVV1111f8ZL/7iL/7aj3nMY/i3WiwW3Hfffbdy1VVXXXXVVVddddX/FQRXXXXVVVddddVVV/2f8Vu/9Vvf89qv/drY5kVlm/vdcMMNnD179hlcddVVV1111VVXXfV/BcFVV1111VVXXXXVVf9n/MM//MNvnz59mrd+67cGwDYvCtucOnWKkydP8g//8A+/zVVXXXXVVVddddVV/1dQjh8/zlVXXXXVVVddddVV/zccHh7unj179hlv+qZv+tYbGxs8/elPZ3Nzk9lsRt/3dF1H3/fMZjMWiwUbGxvUWun7nhtuuIEf/dEf/Zw//dM//Wmuuuqqq6666qqrrvq/gnL8+HGuuuqqq6666qqrrvq/49Zbb/3rjY0NXuM1XuPBt9xyy/HWGqvVir7v6bqOvu+ZzWYsFgu2t7c5ceIEW1tb/NZv/dZ3f9d3fdfHcNVVV1111VVXXXXV/yXoQQ96EFddddVVV1111VVX/d/zju/4jp/14i/+4q/9Yi/2Yq+9v7/PPffcQ62VYRg4duwY1113Hff7kR/5kc/+0R/90c/hqquuuuqqq6666qr/a9CDHvQgrrrqqquuuuqqq676v+maa6558Gu/9mu/1zXXXPOQF3uxF3stgGuuuebB9913360Av/Vbv/XdP/qjP/o5XHXVVVddddVVV131fxV60IMexFVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Slauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666v+8a6655sFnzpx5MMDZs2dvPXPmzIPPnj1763333XcrV1111VVXXXXVVVf9X0blqquuuuqqq6666qr/c6655poHv/Zrv/Z7vfiLv/hrnzlz5sHXXHPNg3k+7rvvvlv/4R/+4bfvu+++W3/7t3/7e+67775bueqqq6666qqrrrrq/xL0oAc9iKuuuuqqq6666qqr/u94x3d8x896p3d6p88G2N/fZ39/n7vvvhtJHBwcAGCb6667jq2tLW688UYA7rvvvlt/+7d/+3t+67d+67vvu+++W7nqqquuuuqqq6666v8C9KAHPYirrrrqqquuuuqqq/73e7EXe7HX/vAP//Dvuuaaax78R3/0R9x1113cc889lFIopRAR3C8zyUxaa7TW2Nzc5NGPfjSv+qqvyj/8wz/89m/91m99z2/91m99N1ddddVVV1111VVX/W9HOX78OFddddVVV1111VVX/e/2Yi/2Yq/9uZ/7ub917ty549/2bd/GXXfdxcHBARFBRBARSEISALaxjW1ss1qtuO222/i7v/s7Tp48+eBXf/VXf+nNzc3j//AP//A7XHXVVVddddVVV131vxnl+PHjXHXVVVddddVVV131v9c111zz4E/6pE/6qSc/+cnHf/Inf5JSChFBRBARRAQRgSQkAWAb29jGNraxzWq14t577+XYsWPHX+qlXurBt95669+cPXv2Vq666qqrrrrqqquu+t+K4Kqrrrrqqquuuuqq/9Xe8R3f8bOe8pSnPPinf/qn+Y/yF3/xF+zv7z/4dV7ndd6Lq6666qqrrrrqqqv+NyO46qqrrrrqqquuuup/tRd7sRd77d/+7d/mP9rf/M3fcM011zyYq6666qqrrrrqqqv+NyO46qqrrrrqqquuuup/rTNnzjwI4OLFi7wgknhukviXHBwc8OAHP/i1r7nmmgdz1VVXXXXVVVddddX/VlSuuuqqq6666qqrrvpf7d577+UFkcS/RBJXXXXVVVddddVVV/2fRXDVVVddddVVV1111f9aZ8+efcZv/uZv/rYkACRxP0k8P5J4bpJ4fo6OjrjmmmsezFVXXXXVVVddddVV/1sRXHXVVVddddVVV131v9pv/dZvfQ//AklI4rlJ4oWxzVVXXXXVVVddddVV/6tRueqqq6666qqrrrrq/wRJAEjiqquuuuqqq6666qqrnongqquuuuqqq6666qr/9STxopDE/SRx1VVXXXXVVVddddX/eVSuuuqqq6666qqrrvo/RxL/WpK46qqrrrrqqquuuur/HCpXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqBbDNVVddddVVV1111VX/q1G56qqrrrrqqquuuup/NUn8a0niqquuuuqqq6666qr/F6hcddVVV1111VVXXXXV82EbSVx11VVXXXXVVVdd9b8awVVXXXXVVVddddVV/6tJQhIAknggSUjigSTxorLNVVddddVVV1111VX/q1G56qqrrrrqqquuuup/NdsPBpDECyOJfy1JXHXVVVddddVVV131vxqVq6666qqrrrrqqqv+T5LE/STx/EhCEpJ4fg4PDzlz5syDueqqq6666qqrrrrqfyuCq6666qqrrrrqqqv+35DEVVddddVVV1111VX/r1C56qqrrrrqqquuuup/NUk8kCReFJL4l0jiqquuuuqqq6666qr/1ahcddVVV1111VVXXfW/niSuuuqqq6666qqrrrrq+aBy1VVXXXXVVVddddX/apJ4bpL415LEc7PNVVddddVVV1111VX/q1G56qqrrrrqqquuuup/NUlcddVVV1111VVXXXXVC0Dlqquuuuqqq6666qr/1STxryWJq6666qqrrrrqqqv+XyC46qqrrrrqqquuuur/BElI4l8iiRfGNveTxFVXXXXVVVddddVV/6tRueqqq6666qqrrrrq/zRJAEjiRSGJq6666qqrrrrqqqv+zyC46qqrrrrqqquuuup/tYhAEs+PJAAkASCJf4ltrrrqqquuuuqqq676P4PKVVddddVVV1111VX/q2Xmg/hPcnh4yJkzZx7EVVddddVVV1111VX/W1G56qqrrrrqqquuuup/tYjg30oSkpDEVVddddVVV1111VX/J1G56qqrrrrqqquuuur/JEm8MJK46qqrrrrqqquuuur/PCpXXXXVVVddddVVV/2vJokHksS/lSSuuuqqq6666qqrrvo/hcpVV1111VVXXXXVVf+rSeI/mm2uuuqqq6666qqrrvo/gcpVV1111VVXXXXVVf+rSUISkrifJF4QSUjiuUniqquuuuqqq6666qr/c6hcddVVV1111VVXXfW/miSuuuqqq6666qqrrrrqBaBy1VVXXXXVVVddddX/GZJ4QSRx1VVXXXXVVVddddX/OwRXXXXVVVddddVVV/2fJglJAEjiqquuuuqqq6666qr/V6hcddVVV1111VVXXfW/miSuuuqqq6666qqrrrrqBaBy1VVXXXXVVVddddX/arXWB/MCSOLf4/DwkGuuueYhXHXVVVddddVVV131vxWVq6666qqrrrrqqqv+V7ONJP4tJCGJq6666qqrrrrqqqv+z6Jy1VVXXXXVVVddddX/S5K4nySuuuqqq6666qqrrvo/icpVV1111VVXXXXVVf+rSeKBJAEgiX8tSVx11VVXXXXVVVdd9X8Klauuuuqqq6666qqr/k+QxItCEpL4l9jmqquuuuqqq6666qr/9ahcddVVV1111VVXXfX/giSuuuqqq6666qqrrvp/h8pVV1111VVXXXXVVf/nSGJ7e5vHPOYx3HjjjWxvb7O1tcX9Dg4OANjb2+POO+/kjjvu4LbbbuOqq6666qqrrrrqqv9zqFx11VVXXXXVVVdd9b+aJCQBcPz4cV7iJV6CV3mVV2F/f5/t7W2en62tLQC2tra44YYbeIVXeAX29vb4h3/4B/7sz/6Mq6666qqrrrrqqqv+z6By1VVXXXXVVVddddX/CQ960IN493d/d/b29gCICP7+7/+ew8NDDg8Pue+++7jf5uYmANdccw3XXHMNm5ubXHPNNbzKq7wKL/ZiL8aTnvQk/v7v/x7bXHXVVVddddVVV131vxqVq6666qqrrrrqqqv+V5PE67zO6/C6r/u6AJRS+JM/+ROe/vSn84IcHh4C8PSnP52nP/3pAGxubvJKr/RKbG5u8qhHPYpaK+v1mquuuuqqq6666qqr/lejctVVV1111VVXXXXV/2qv+Zqv+eCXfdmXBeDv/u7v+Id/+Af+LQ4PD/nN3/xNXvzFX5wXf/EX5+EPfzhHR0ecPXv2wVx11VVXXXXVVVdd9b8Vlauuuuqqq6666qqr/ld7tVd7tdc+fvw4v/Ebv8F9990HgCT+rf7+7/+ew8NDXumVXglJnD17lquuuuqqq6666qqr/tciuOqqq6666qqrrrrqf60Xe7EXe61jx47d+vSnP5377ruP+9nm3+PpT386T3/609nc3OSqq6666qqrrrrqqv/VCK666qqrrrrqqquu+l/rxV7sxV77mmuuefC9997Lc7PNv8fTn/50rrrqqquuuuqqq676X4/gqquuuuqqq6666qr/ta655poHAxweHvL82ObfanNzE4B/+Id/+G2uuuqqq6666qqrrvrfiuCqq6666qqrrrrqqv+17rvvvlvvu+++Wx/60Ifygtjm3+Kaa64BwLa56qqrrrrqqquuuup/K4Krrrrqqquuuuqqq/7X+q3f+q3vBrjmmmu45ppreEFs86+xubnJQx7yEAB++7d/+3u46qqrrrrqqquuuup/K4Krrrrqqquuuuqqq/7XOnv27DN+67d+67s3Nzd55Vd+ZV4Y27yoXumVXgmAH/mRH/ns++6771auuuqqq6666qqrrvrfinL8+HGuuuqqq6666qqrrvrf6+zZs884PDzcfZmXeZnXfuhDH8rFixc5PDzkBZHEC7K5uckbv/Ebc+LECQA+67M+63W46qqrrrrqqquuuup/M8rx48e56qqrrrrqqquuuup/r8PDw92zZ88+YzabffSjH/1oHvrQh7K1tUXXdezu7vL8SOKBrrnmGl78xV+cV3qlV2KaJv7+7/+e66+/nh/90R/9HK666qqrrrrqqquu+t8MPehBD+Kqq6666qqrrrrqqv/9HvKQh/jGG2/k5V/+5XnJl3xJJFFK4fDwkMPDQw4ODjg8PGRzcxNJAFxzzTVcc8013O/xj388t99+O8vlkrd6q7fi7d7u7cRVV1111VVXXXXVVf+bUbnqqquuuuqqq6666v+M3d1dfu/3fo/HP/7xnD59mhd/8RfnxIkT3HDDDcxmM57b4eEhT33qUzk8POTxj388XdcREUjiqquuuuqqq6666qr/E6hcddVVV1111VVXXfV/zt7eHuv1mgsXLnD8+HFuvPFGHvOYx3DDDTdgmzvuuIN/+Id/4K677mIcRyKCWitXXXXVVVddddVVV/2fQ+Wqq6666qqrrrrqqv8TbPPCZCaSkERrjRdEElddddVVV1111VVX/Z9BcNVVV1111VVXXXXV/xuSuOqqq6666qqrrrrq/xUqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrq/x1JPDdJXHXVVVddddVVV131fw6Vq6666qqrrrrqqqv+X5HEv0QSV1111VVXXXXVVVf9n0Dlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rgqquuuuqqq6666qr/FyQhiauuuuqqq6666qqr/l+hctVVV1111VVXXXXV/3mSuOqqq6666qqrrrrq/yUqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq676f0kSz00SV1111VVXXXXVVVf9n0Llqquuuuqqq6666qr/EyRx1VVXXXXVVVddddVVz4XKVVddddVVV1111VVXPYAkrrrqqquuuuqqq676P4PKVVddddVVV1111VX/r0hCElddddVVV1111VVX/b9A5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qgquuuuqqq6666qqr/t+QxFVXXXXVVVddddVV/69Queqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVc9FElddddVVV1111VVX/Z9A5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVVwGSuOqqq6666qqrrrrq/xwqV1111VVXXXXVVVddddVVV1111VVXXXXV/1UEV1111VVXXXXVVVf9r7exsfFgXkSSuJ8kACQBIIkHuuaaax7MVVddddVVV1111VX/mxFcddVVV1111VVXXfW/3sHBAf9RJHHVVVddddVVV1111f8ZVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVdd9f+OJK666qqrrrrqqquu+n+BylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqr/s+RxFVXXXXVVVddddVVVwFUrrrqqquuuuqqq676P0USV1111VVXXXXVVVdd9UxUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV131/4Ik/jUODw+56qqrrrrqqquuuup/PYKrrrrqqquuuuqqq/7fkMRVV1111VVXXXXVVf+vULnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VXPRRJXXXXVVVddddVVV/2fQOWqq6666qqrrrrqqqueSRJXXXXVVVddddVVV/2fQuWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVf8vSeKBJAEgiauuuuqqq6666qqr/s+gctVVV1111VVXXXXV/wnv9E7vRNd1HBwccOLECSKCUgp937O5ucnGxgbL5RLbbG1t8chHPpIbb7yRvb09tre3iQjW6zUbGxucP3+ezc1Nrrrqqquuuuqqq676X4/KVVddddVVV1111VX/61133XW8wiu8Av+SYRgAmM1mXHPNNbwgN998M7/1W7/13ffdd9+tXHXVVVddddVVV131vxl60IMexFVXXXXVVVddddVV/7tdc801D36xF3ux1z5z5syD+A9w9uzZZ/zWb/3Wd3PVVVddddVVV1111f926EEPehBXXXXVVVddddVVV1111VVXXXXVVVddddX/SVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/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+r+EeiVJmlnngoPAAAAABJRU5ErkJggg==) ```kcl -// / Pattern using a raw axis. - +/// Pattern using a raw axis. exampleSketch = startSketchOn(XZ) |> circle(center = [0, 0], radius = 1) @@ -72,7 +72,7 @@ example = extrude(exampleSketch, length = -5) center = [10, -20, 0], instances = 11, arcDegrees = 360, - rotateDuplicates = true, + rotateDuplicates = true ) ``` diff --git a/docs/kcl-std/patternLinear3d.md b/docs/kcl-std/functions/std-solid-patternLinear3d.md similarity index 99% rename from docs/kcl-std/patternLinear3d.md rename to docs/kcl-std/functions/std-solid-patternLinear3d.md index d4da764dc..dcb76dea4 100644 --- a/docs/kcl-std/patternLinear3d.md +++ b/docs/kcl-std/functions/std-solid-patternLinear3d.md @@ -1,44 +1,44 @@ --- title: "patternLinear3d" subtitle: "Function in std::solid" -excerpt: "Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times." +excerpt: "" layout: manual --- -Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times. + ```kcl patternLinear3d( - @solids: [Solid], - instances: number, - distance: number, - axis: Point3d, + @solids: [Solid; 1+], + instances: number(_), + distance: number(Length), + axis: Axis3d | Point3d, useOriginal?: bool, -): [Solid] +): [Solid; 1+] ``` -/// +Repeat a 3-dimensional solid along a linear path, with a dynamic amount +of distance between each repetition, some specified number of times. ### Arguments | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl-std/types/std-types-Solid) | The solid(s) to duplicate | Yes | -| `instances` | [`number`](/docs/kcl-std/types/std-types-number) | 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. | Yes | -| `distance` | [`number`](/docs/kcl-std/types/std-types-number) | Distance between each repetition. Also known as 'spacing'. | Yes | -| `axis` | [`Point3d`](/docs/kcl-std/types/std-types-Point3d) | The axis of the pattern. A 3D vector. | Yes | -| `useOriginal` | [`bool`](/docs/kcl-std/types/std-types-bool) | 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. | No | +| `solids` | [`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) | The solid(s) to duplicate. | Yes | +| `instances` | [`number(_)`](/docs/kcl-std/types/std-types-number) | 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. | Yes | +| `distance` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | Distance between each repetition. Also known as 'spacing'. | Yes | +| `axis` | [`Axis3d`](/docs/kcl-std/types/std-types-Axis3d) or [`Point3d`](/docs/kcl-std/types/std-types-Point3d) | The axis of the pattern. A 3D vector. | Yes | +| `useOriginal` | [`bool`](/docs/kcl-std/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. | No | ### Returns -[`[Solid]`](/docs/kcl-std/types/std-types-Solid) +[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) ### Examples ```kcl -// / Pattern using a named axis. - +/// Pattern using a named axis. exampleSketch = startSketchOn(XZ) |> startProfile(at = [0, 0]) @@ -48,14 +48,17 @@ exampleSketch = startSketchOn(XZ) |> close() example = extrude(exampleSketch, length = 1) - |> patternLinear3d(axis = X, instances = 7, distance = 6) + |> patternLinear3d( + axis = X, + instances = 7, + distance = 6 + ) ``` ![Rendered example of patternLinear3d 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAC4YUlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+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/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/qwiuuuqqq676X+Waa655MFf9j3DNNdc8+JprrnkwV/23u+aaax58zTXXPJir/ttdc801D36xF3ux1+aq/3bXXHPNg1/ndV7nvbnqv90111zz4Bd7sRd7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wa/92q/9Xi/+4i/+2i/2Yi/22jzT3t4ee3t77O3t8djHPpZ/+Id/+O3P/MzPfB2uuuqqq/5/Qg960IO46qqrrrrqf75rrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jyXf/iHf/jtz/zMz3wdrvpPdc011zz4xV7sxV77xV7sxV7rdV7ndd6b5/KZn/mZr/MP//APv81V/6muueaaB7/2a7/2e734i7/4a7/Yi73Ya/MA//AP//Dbn/mZn/k6XPWf6syZMw+65pprHvJiL/Zir/XiL/7ir/1iL/Zir80DfP3Xf/37/NZv/dZ3c9V/qmuuuebBL/ZiL/baL/ZiL/Zar/M6r/PePJcP+ZAPech99913K1f9p7rmmmse/GIv9mKv/WIv9mKv9Tqv8zrvzXN5u7d7O3HVf7prrrnmwS/2Yi/2Wq/zOq/z3i/2Yi/22jzAb/3Wb33313/9178PV1111VX/P6EHPehBXHXVVVdd9b/PNddc8+DXfu3Xfq8Xf/EXf+0f+ZEf+ZyzZ8/eet99993KVf9lrrnmmgefOXPmwa/zOq/zXtdcc82Dv/7rv/597rvvvlu56r/UNddc8+AXe7EXe+0Xe7EXey2Ar//6r38frvovd8011zz4xV7sxV7rdV7ndd77R37kRz7nH/7hH36bq/7LXXPNNQ9+7dd+7fd68Rd/8df+zM/8zNfhqv9y11xzzYNf7MVe7LVe7MVe7LUBvv7rv/59uOq/3DXXXPPgF3uxF3vtF3uxF3utf/iHf/id3/qt3/purrrqqqv+/0IPetCDuOqqq6666qqrrrrqqquuuuqqq6666qqr/k+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/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/VfwjqDpcfAraF4MAAAAASUVORK5CYII=) ```kcl -// / Pattern using a raw axis. - +/// Pattern using a raw axis. exampleSketch = startSketchOn(XZ) |> startProfile(at = [0, 0]) @@ -65,7 +68,11 @@ exampleSketch = startSketchOn(XZ) |> close() example = extrude(exampleSketch, length = 1) - |> patternLinear3d(axis = [1, 0, 1], instances = 7, distance = 6) + |> patternLinear3d( + axis = [1, 0, 1], + instances = 7, + distance = 6 + ) ``` ![Rendered example of patternLinear3d 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAACqVklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+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+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVf9r3TNNdc8+LVf+7Xf68Vf/MVf++///u9/G+BHf/RHP4errrrqqquuejb0oAc9iKuuuuqqq6666qqrrrrqqqv+d7jmmmse/Nqv/drv9eIv/uKv/WIv9mKvvbu7y1/+5V/ykIc8hIc85CHcd999t37WZ33W69x33323ctVVV1111VWAHvSgB3HVVVddddVVV1111VVXXXXV/1zXXHPNg1/7tV/7vV7ndV7nva+55poH7+7u8pd/+Zfs7u7yV3/1VwBI4nVe53V4ndd5He67775bf+u3fuu7f/RHf/RzuOqqq6666v879KAHPYirrrrqqquuuuqqq6666qqr/me55pprHvzar/3a7/U6r/M6733NNdc8eHd3l7/8y79kd3eXv/7rv+YFefCDH8z7vu/7AvD1X//17/Nbv/Vb381VV1111VX/n6EHPehBXHXVVVddddVVV1111VVXXfXf75prrnnwa7/2a7/X67zO67z3Nddc8+Dd3V3+6q/+iqc//enceuutvCDHjx/nZV7mZXiZl3kZjh8/zv3uu+++Wz/kQz7kIVx11VVXXfX/GZWrrrrqqquuuuqqq6666qqr/ttcc801D37t137t93qd13md977mmmsevLu7y1/91V/x8z//89x66628IMePH+dlXuZleJmXeRmOHz/O/Y6OjnjGM57BYx7zGK666qqrrroKoHLVVVddddVVV1111VVXXXXVf6lrrrnmwa/92q/9Xq/zOq/z3tdcc82Dd3d3+au/+it+/ud/nltvvZUX5Pjx47zMy7wML/MyL8Px48e539HREc94xjM4e/Ys586d4/Tp0zzmMY/h7Nmzt3LVVVddddX/d1Suuuqqq6666qqrrrrqqquu+k93zTXXPPi1X/u13+ud3umdPhtgd3eXv/qrv+Lnf/7nufXWW3lBjh8/zsu8zMvwOq/zOjzQ0dERz3jGMzh37hxnz57lgTY3NwG47777buWqq6666qr/76hcddVVV1111VVXXXXVVVdd9Z/immuuefBrv/Zrv9c7vdM7fTbA7u4uv/Vbv8XTn/50br31Vl6QEydO8NIv/dK8zuu8Dg90dHTEM57xDM6dO8e5c+d4QRaLBQD33XffrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqr/sNcc801D37t137t93qnd3qnzwbY3d3lt37rt/irv/ordnd3eW6SADh+/Dgv/dIvzeu8zuvwQEdHR9x2222cO3eOs2fP8txs80C22dzcBODs2bPP4Kqrrrrqqv/vqFx11VVXXXXVVVddddVVV13173LNNdc8+LVf+7Xf653e6Z0+G2B3d5ff+q3f4q/+6q/Y3d3lfpJ4oAc/+ME8+MEP5nVe53V4oKOjI2677TZuu+02jo6OeEFs8/xsbGxw1VVXXXXVVc9E5aqrrrrqqquuuuqqq6666qp/tRd7sRd77Rd7sRd7rXd6p3f6bIDd3V1+67d+i7/6q79id3cXSQBI4oEe/OAH8+AHP5jXeZ3X4YGOjo647bbbuP322zk8POS52eaBbPPcbAOwubkJwD/8wz/8NlddddVVV/1/R+Wqq6666qqrrrrqqquuuuqqF8mLvdiLvfaLvdiLvdY7vdM7fTbA7u4uv/Vbv8Vf//Vfs7u7y/0kcb/jx4/z0i/90gC8zuu8Dg90dHTEbbfdxu23387R0REviG3+Jba538bGBgD33XffrVx11VVXXfX/HZWrrrrqqquuuuqqq6666qqrnq9rrrnmwa/92q/9XgDv9E7v9NkAu7u7/NZv/Ra//du/zQty/PhxXvqlX5oTJ07w0i/90jzQ0dERt99+O7fffjuHh4c8N9s8kG2em22uuuqqq6666kVE5aqrrrrqqquuuuqqq6666qpnueaaax782q/92u91zTXXPPh1Xud13htgd3eX3/qt3+K3f/u3eUGOHz/OS7/0S3PixAle+qVfmgc6Ojri9ttv54lPfCIvjG3+JbZ5bra535kzZwD4h3/4h9/mqquuuuqqq4DKVVddddVVV1111VVXXXXV/3PXXHPNg1/7tV/7va655poHv87rvM57A+zu7vJbv/Vb/PZv/zYvyPHjx3npl35pHvKQh/DgBz+YBzo6OuL222/nSU96ErZ5brZ5INs8N9s8kG2em20eaGNjA4D77rvvVq666qqrrroKqFx11VVXXXXVVVddddVVV/0/dM011zz4tV/7td/rxV/8xV/7xV7sxV4bYHd3l9/6rd/it3/7t3lBjh8/zku/9EvzkIc8hAc/+ME80NHREbfffjtPetKTeGFs8y+xzb/ENs/NNlddddVVV131AFSuuuqqq6666qqrrrrqqqv+H3md13md936d13md93qxF3ux1wa49dZb+a3f+i1++7d/mxfkxIkTvPRLvzQPfvCDefCDH8wDnT9/nvPnz/OkJz0J2zw32zyQbZ6bbR7INs/NNv8S25w5cwaAf/iHf/gdrrrqqquuugqoXHXVVVddddVVV1111VVX/T/xYi/2Yq/9Oq/zOu/1Yi/2Yq/913/91/zUT/0Uz00SAMePH+elX/qlefCDH8yDH/xgHuj8+fOcP3+eJz3pSdzPNs/NNg9km+dmm3+JbZ6bba666qqrrrrqRUDlqquuuuqqq6666qqrrrrq/4lrrrnmwS/2Yi/22gAPfvCDOX78OJcuXeJ+x48f56Vf+qV56Zd+aY4fP879lsslR0dHnD9/nic/+cnY5l9im3+JbZ6bbR7INs/NNs/NNgBnzpwB4B/+4R9+m6uuuuqqq64CKlddddVVV1111VVXXXXVVf9PnDlz5kG7u7vs7u7y4Ac/mPd5n/fhp3/6p3nwgx/MS7/0S3P8+HHut1wuueOOOzg6OuKOO+7gfrZ5brZ5INs8N9s8kG2em23+JbZ5bra56qqrrrrqqheAylVXXXXVVVddddVVV1111f8T11xzzYOf8Yxn8Du/8zu81Eu9FK/1Wq/Fe7/3e3O/5XLJHXfcwXK55I477sA2/xLb/Ets8y+xzXOzzb/ENg+0ubkJwH333XcrV1111VVXXQVUrrrqqquuuuqqq6666qqr/p/Z3d3lb//2b3mpl3opjh8/zpOf/GTOnz/PhQsXuJ9tnpttHsg2z802D2Sb52abB7LNc7PNc7PNC7OxsQHAfffddytXXXXVVVdddQXBVVddddVVV1111VVXXXXV/xMv9mIv9tq7u7sA7O7ucvz4cQDuuOMOLly4wAtjmweyzXOzzQPZ5rnZ5l9im+dmm+dmmwc6c+YMAP/wD//w21x11VVXXXXVFVSuuuqqq6666qqrrrrqqqv+H9nd3eW5LZdLHsg2D2SbB7LNc7PNv8Q2z802D2Sb52ab52abq6666qqrrnoRULnqqquuuuqqq6666qqrrvp/4pprrnkwz3T8+HEAlsslD2SbB7LNA9nmudnmudnmgWzz3Gzzb2Gb52abjY0NAO67775bueqqq6666qorqFx11VVXXXXVVVddddVVV/0/8oxnPAOAY8eOAXB0dMT9bPNAtvmX2Oa52eaBbPPcbPPcbPPcbPOi2tzcBODs2bPP4KqrrrrqqquuoHLVVVddddVVV1111VVXXfX/wDXXXPNgHuD48eMALJdLAGzzQLZ5brZ5INs8N9v8S2zz3Gzz3Gzz3Gzz3GwDsLm5CcB99913K1ddddVVV111BZWrrrrqqquuuuqqq6666qr/B86cOfNggN3dXZ6bbR7INs/NNv8S2zw32zyQbZ6bbZ6bbZ6bbZ6bbe63sbEBwNmzZ2/lqquuuuqqq66gctVVV1111VVXXXXVVVdd9f/ANddc82CeSRLHjh0D4OjoiAeyzXOzzXOzzQPZ5rnZ5l9im+dmm+dmm+dmmwfa3NwE4L777ruVq6666qqrrrqCylVXXXXVVVddddVVV1111f8Tu7u73O/48eMALJdLXhjbPDfbPJBtnpttnptt/iW2eW62+Zdsbm4CcN99993KVVddddVVVz0blauuuuqqq6666qqrrrrqqv8HXuzFXuy1dnd3eWFs80C2eW62+ZfY5rnZ5rnZ5t/KNg+0sbEBwNmzZ2/lqquuuuqqq56NylVXXXXVVVddddVVV1111f8Tly5d4n4PetCDADh//jwAtnkg2zw32zw32zyQbZ6bbZ6bbZ6bbZ6bbZ6bbZ7bxsYGAPfdd9+tXHXVVVddddWzEVx11VVXXXXVVVddddVVV/0/cM011zyYF8A2D2Sb52ab52abB7LNc7PNc7PNc7PNc7PNc7PNc7PN5uYmAPfdd9+tXHXVVVddddWzEVx11VVXXXXVVVddddVVV/0/cObMmQfv7u5yv+PHjwNwdHTEA9nmudnmudnmX2Kb52ab52ab52ab52abF2RzcxOAs2fPPoOrrrrqqquuejYqV1111VVXXXXVVVddddVV/0/s7u7ywtjmudnmudnmudnmX2Kb52ab52ab52ab58c2ABsbG1x11VVXXXXV80Hlqquuuuqqq6666qqrrrrq/4FrrrnmwTzT8ePHATg6OuJ+tnlutnlutnlutnlutvnPZpv7bW5uAvAP//APv81VV1111VVXPRuVq6666qqrrrrqqquuuuqq/yee8YxnAHDs2DEAlsslL4htnpttnpttnpttnpttnpttnpttnpttnpttHmhzcxOA++6771auuuqqq6666tmoXHXVVVddddVVV1111VVX/R/3Yi/2Yq/NAxw/fhyAo6MjAGzzL7HNc7PNc7PNc7PNc7PNc7PNc7PNc7PNVVddddVVV72IqFx11VVXXXXVVVddddVVV/0fd8011zwYYHd3l+dmm+dmmweyzXOzzXOzzXOzzXOzzXOzzXOzzXOzzXM7c+YMAP/wD//w21x11VVXXXXVc6Jy1VVXXXXVVVddddVVV131/8yDHvQgAI6Ojnhutnkg2zw32zw32zw32zw32zw32zw327yoNjc3Abjvvvtu5aqrrrrqqqueE5Wrrrrqqquuuuqqq6666qr/486cOfOg3d1dnttyueSBbPNAtnlutnlutnlutnlutnlutnlR2ea52eaqq6666qqrXggqV1111VVXXXXVVVddddVV/8ddc801D97d3eV+x48fB+Do6Ij72eaBbPPcbPPcbPPcbPPcbPPcbPP82Oa52ea52QbgzJkzAPzDP/zD73DVVVddddVVz4nKVVddddVVV1111VVXXXXV/wOXLl3ifseOHQNguVwCYJt/iW2em22em22em21eVLZ5bra56qqrrrrqqn8jgquuuuqqq6666qqrrrrqqv/jrrnmmgfv7u7y/NjmudnmgWzz3Gzz3GzzorLNc7PNc7PN82Ob+11zzTUA/MM//MNvc9VVV1111VXPieCqq6666qqrrrrqqquuuur/uDNnzjx4d3eX+x0/fhyAw8NDnpttHsg2z802LyrbPDfbPDfbPDfbPD+2ueqqq6666qoXEZWrrrrqqquuuuqqq6666qr/R06cOAHA0dERz802/1a2eW62eW62eW62eVHZ5rltbm4CcN99993KVVddddVVVz0nKlddddVVV1111VVXXXXVVf/HXXPNNQ/e3d0F4NixYwAcHR3xQLZ5brZ5brZ5brZ5brZ5brZ5brZ5fmzz3Gzz3DY3NwG47777buWqq6666qqrnheVq6666qqrrrrqqquuuuqq/8OuueaaBwNcunQJgOPHjwOwXC65n22em22em22em22em22em22em22eH9s8N9s8P2fOnAHgH/7hH36bq6666qqrrnpeVK666qqrrrrqqquuuuqqq/4PO3PmzIN5IWzz3Gzz3Gzz3Gzz3Gzz3GzzorLNi8o2V1111VVXXfUvoHLVVVddddVVV1111VVXXfV/2DXXXPNggN3dXQCOHTsGwNHREbZ5brZ5brZ5brZ5brZ5brZ5fmzz3Gzz/NjmudkGYHNzE4D77rvvVq666qqrrrrqeVG56qqrrrrqqquuuuqqq676P253d5f7HT9+HICjoyOem22em22em22em22em22eH9s8N9s8P7Z5bra53+bmJgBnz559BlddddVVV131vKhcddVVV1111VVXXXXVVVf9H7e7u8u/xDbPzTbPzTbPzTbPzTbPj22em22eH9v8SzY3NwG47777buWqq6666qqrnhfBVVddddVVV1111VVXXXXV/2H/8A//8NsPfvCDea3Xei0Ajh8/DsDR0RH3s81zs81zs81zs82LyjbPzTbPj22eH9s80ObmJgBnz569lauuuuqqq656XgRXXXXVVVddddVVV1111VX/h9133323/siP/Mhnv9RLvRSv9VqvxbFjxwA4OjoCwDbPzTbPzTbPzTbPj22em21eVLZ5fmzz3DY3NwG47777buWqq6666qqrnheVq6666qqrrrrqqquuuuqq/+N+9Ed/9HMA3uiN3uizjx8/DsDR0RG2eW62eW62eW62eX5s89xs8/zY5rnZ5vmxzXPb3Nzkqquuuuqqq/4FBFddddVVV1111VVXXXXVVf8P/PZv//b33Hnnnb/NM73My7wMp0+f5oFs89xs89xs8/zY5rnZ5vmxzXOzzfNjm+dnY2MDgH/4h3/4ba666qqrrrrq+aMcP36cq6666qqrrrrqqquuuuqq/+sODw93/+Ef/uF3Dg8Pd1/8xV/8tY8dO8Ytt9zCLbfcwrFjxxiGgaOjIx7INs/NNs+PbZ6bbZ4f27yobPP82Oaaa67hpptu4h/+4R9++0//9E9/hquuuuqqq656XpTjx49z1VVXXXXVVVddddVVV131/8Hh4eHuP/zDP/zOb//2b3/P4eHhriRuvPHGBx87dowHPehBPOhBD+L48eOM48jh4SHPzTbPj22em22eH9s8P7Z5brZ5fmwDcNNNN3Httdfyp3/6pz/9D//wD7/DVVddddVVVz0vyvHjx7nqqquuuuqqq6666qqrrvr/5PDwcPcf/uEffue3fuu3vue3f/u3v+fw8HD3mmuuefDx48ePHzt2jAc96EE86EEPous6AI6OjrDN82Ob52ab58c2z49tXlS2ud9DH/pQTpw4wW//9m9/z6233vrXXHXVVVddddXzohw/fpyrrrrqqquuuuqqq6666qr/rw4PD3f/4R/+4Xd+4Rd+4Wt++7d/+3sODw93r7nmmgcfP378+JkzZ3jQgx7Egx70ILquQxJHR0fczzbPzTbPj22eH9s8P7b5l9x0002cOHGCP/3TP/2ZW2+99a+56qqrrrrqqueFHvSgB3HVVVddddVVV1111VVXXXXVc7rmmmse/I7v+I6f9Tqv8zrvzQMcHR1x6623cvbsWc6ePcsD2eb5sc3zY5vnxzbPj20e6C3f8i3Z3NzkQz7kQx5y33333cpVV1111VVXPS/0oAc9iKuuuuqqq6666qqrrrrqqquev2uuuebBZ86cefDrvM7rvNfrvM7rvDcPcHh4yDOe8QxuvfVWjo6OsM1zs83zY5vnxzbPj22e27u8y7sA8HZv93biqquuuuqqq54/9KAHPYirrrrqqquuuuqqq6666qqr/mXXXHPNg1/sxV7stV/sxV7stV7ndV7nvXmAw8NDbr31Vh73uMdxP9s8P7Z5fmzz/Njm+XmXd3kXAN7u7d5OXHXVVVddddXzhx70oAdx1VVXXXXVVVddddVVV1111b/ONddc8+AXe7EXe+0Xe7EXe63XeZ3XeW+e6fDwkKOjI57+9Kdz66238txs8/zY5vmxzfNz5swZXv/1X59/+Id/+O3P/MzPfB2uuuqqq6666vmjHD9+nKuuuuqqq6666qqrrrrqqqv+dQ4PD3dvvfXWv/7TP/3Tn/nt3/7t77n11lv/5vDwcPeRj3zkS29ubnLjjTfy4Ac/mBMnTtB1Hbu7u9jm+bHN82Ob58c21157LTfddBP/8A//8Nt/+qd/+jNcddVVV1111fNHOX78OFddddVVV1111VVXXXXVVVf92x0eHu7eeuutf/2nf/qnP/Pbv/3b33Prrbf+zebm5vEbb7zxwcePH+fGG2/kwQ9+MMePH6fve3Z3d7mfbZ4f2zw/tgE4ceIEN910E7feeutf/+mf/unPcNVVV1111VXPH+X48eNcddVVV1111VVXXXXVVVdd9R/j8PBw99Zbb/3r3/qt3/qe3/7t3/6eW2+99W82NzeP33jjjQ8+ceIEN954Iw95yEM4fvw4Xdexu7vLc7PN82Ob+z3qUY/ixIkT/MIv/MLX3HrrrX/NVVddddVVVz1/VK666qqrrrrqqquuuuqqq676T3Hffffdet999333b/3Wb333Nddc8+AXe7EXe+3XeZ3Xea8Xe7EXe+2HPOQhPOQhD+HFX/zFue+++3j605/Offfdh22uuuqqq6666j8QetCDHsRVV1111VVXXXXVVVddddVV/3WuueaaB7/2a7/2e734i7/4a7/Yi73Ya/NMh4eH3HfffTztaU/jvvvu44Fs80Bv9VZvxebmJh/yIR/ykPvuu+9Wrrrqqquuuur5Qw960IO46qqrrrrqqquuuuqqq6666r/HNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22e6fDwkPvuu4+nPe1p3HvvvTy3t3qrt2Jzc5MP+ZAPech99913K1ddddVVV131/KEHPehBXHXVVVddddVVV1111VVXXfXf75prrnnwa7/2a7/Xi7/4i7/2i73Yi702z3R4eMi9997L0572NO677z4A3vVd3xWAt3u7txNXXXXVVVdd9YKhBz3oQVx11VVXXXXVVVddddVVV131P8s111zz4Nd+7dd+r9d5ndd572uuuebBPNPh4SH33nsvD33oQ7nvvvtu/ZAP+ZCHcNVVV1111VUvGOX48eNcddVVV1111VVXXXXVVVf9d7jmmmse/GZv9mYf9bmf+7m/fc011zz4wQ9+8Ev/wz/8w+9wFYeHh7v/8A//8Du/8Au/8DW//du//T2Hh4e711xzzYNPnDhx/MSJEwD86Z/+6U//6Z/+6c9w1VVXXXXVVS8YetCDHsRVV1111VVXXXXVVVddddV/hWuuuebBZ86cefCLvdiLvdY7vdM7fTbA7u4uf/3Xf81Lv/RLc/z4cX7kR37ks3/0R3/0c7jq+brmmmse/I7v+I6f9Q//8A+/81u/9VvfzVVXXXXVVVe9cOhBD3oQV1111VVXXXXVVVddddVV/1muueaaB7/2a7/2e11zzTUPfp3XeZ33Btjd3eWv//qvecYznsGtt94KwEu/9EvzVm/1Vtx33323fv3Xf/37/MM//MNvc9VVV1111VVX/XuhBz3oQVx11VVXXXXVVVddddVVV/1Huuaaax782q/92u/14i/+4q/9Yi/2Yq8NsLu7y1//9V/zN3/zN+zu7vL8vNZrvRav/dqvzX333Xfrh3zIhzyEq6666qqrrrrq34vKVVddddVVV1111VVXXXXVf4Brrrnmwa/92q/9Xi/+4i/+2i/2Yi/22gC7u7v89m//Nn/zN3/D7u4uz48kAI4fP86lS5cAuOaaax58zTXXPPi+++67lauuuuqqq6666t8DPehBD+Kqq6666qqrrrrqqquuuurf4pprrnnwa7/2a7/X67zO67z3Nddc82CA3d1d/vqv/5rf+Z3f4blJ4oGOHz/OS73US3H8+HFe6qVeigf6rd/6re/++q//+vfhqquuuuqqq67696By1VVXXXXVVVddddVVV131r3DNNdc8+LVf+7Xf63Ve53Xe+5prrnkwwK233spv//Zv8zu/8zvcTxLPz/Hjx3mpl3opHvSgB/HgBz+YBzo6OuLo6IjTp09z1VVXXXXVVVf9h6By1VVXXXXVVVddddVVV131L7jmmmse/Nqv/drv9U7v9E6fDbC7u8tf//Vf87jHPY7f+Z3fAUASknh+jh8/zku91EvxoAc9iAc/+ME80NHREbfddhtPeMITAHj0ox/N6dOnue+++27lqquuuuqqq67696Jy1VVXXXXVVVddddVVV131fFxzzTUPfu3Xfu33eqd3eqfPBtjd3eW3f/u3ecYznsEznvEM7ieJ5+f48eO81Eu9FC/1Ui/F8ePHeaBz585x7tw5nvjEJwJgm/ttbGwAcPbs2Wdw1VVXXXXVVVf9e1G56qqrrrrqqquuuuqqq64CrrnmmgefOXPmwS/2Yi/2Wu/0Tu/02QC7u7v8zu/8DrfeeivPeMYz+JccP36cl3qpl+KlXuqlOH78OPc7OjritttuY7lcctttt3E/21x11VVXXXXVVf+pqFx11VVXXXXVVVddddVV/29dc801D37t137t97rmmmse/Dqv8zrvDbC7u8vv/M7vcOutt/KMZzyDf8nx48d5qZd6KV7rtV6LBzo6OuL222/n3LlznDt3judmm+fn9OnTANx33323ctVVV1111VVX/XtRueqqq6666qqrrrrqqqv+X7nmmmse/Nqv/drv9eIv/uKv/WIv9mKvDbC7u8vv/M7v8Dd/8zfs7u7yL3nQgx7Egx/8YF7rtV6LBzo6OuL222/n3LlznD9/Hts8P7Z5fmxzv7Nnz97KVVddddVVV13170Xlqquuuuqqq6666qqrrvo/75prrnnwa7/2a7/Xi7/4i7/2i73Yi702wO7uLr/zO7/D3/zN37C7u8sLc/z4cV7qpV4KgNd6rdfigY6Ojrj99tu5/fbbOTo6AsA2z49tXhDbAGxsbABw33333cpVV1111VVXXfXvReWqq6666qqrrrrqqquu+j/pmmuuefBrv/Zrv9frvM7rvPc111zzYIDd3V1+53d+h9/5nd/hX3L8+HFe6qVeigc/+ME86EEP4oGOjo64/fbbuf322zk6OuKBbPP82Ob5sc1VV1111VVXXfWfhspVV1111VVXXXXVVVdd9X/GNddc8+DXfu3Xfq/XeZ3Xee9rrrnmwQC33norv/M7v8Pv/M7v8C85ceIEL/mSL8mDH/xgHvSgB/FAR0dH3H777TzxiU/k+bHNC2Kb58c2D7SxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f9q11xzzYNf+7Vf+73e6Z3e6bMBdnd3+Zu/+Rse//jH8zu/8zu8IJIAOH78OC/5ki/Jgx/8YB70oAfxQOfPn+fcuXM86UlPAsA2z49tnh/bvCC2eW4bGxsAnD179lauuuqqq6666qr/CFSuuuqqq6666qqrrrrqqv+1PvdzP/e3XuzFXuy1d3d3+Z3f+R1uvfVWnvGMZ/DcJPFAx48f5yVf8iV5qZd6KY4fP879jo6OOH/+PEdHRzzpSU/ifrZ5QWzz/Njm+bHNC7KxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f9K7/iO7/hZL/ZiL/bat956K9/7vd/LA0niuR0/fpyXfMmX5LVe67V4oKOjI26//XaWyyW33347z802z49tXhDbPD+2eX5sc9VVV1111VVX/aegctVVV1111VVXXXXVVVf9r/TiL/7irw1w/PhxTpw4we7uLs/t+PHjvORLviSv9VqvxQMdHR1xxx13cO7cOc6fP8/zY5sXxDbPj21eENs8P7a538bGBgD33XffrVx11VVXXXXVVf8RqFx11VVXXXXVVVddddVV/6sdP36c13zN1+Rnf/ZnOX78OMeOHeNBD3oQr/Var8UDHR0dcccdd3D+/HnOnTvHC2Ob58c2L4htnh/bvCC2eaCNjQ2uuuqqq6666qr/UFSuuuqqq6666qqrrrrqqv+Vzpw58+C//Mu/5GVf9mV50IMexFu+5VvyUi/1UjzQ0dERd9xxB7fffjvL5RIA27wgtnlBbPP82OYFsc3zY5sX5uzZs8/gqquuuuqqq676j0Dlqquuuuqqq6666qqrrvpf66/+6q84ceIED3nIQzh+/DgAR0dH3HHHHdx+++0sl0vuZ5sXxDYviG1eENs8P7Z5QWzzgmxsbHDVVVddddVVV/2HonLVVVddddVVV1111VVX/a90zTXXPBjg4sWLPOQhD+H222/nb/7mb3hutnlhbPOC2Ob5sc0LYpsXxDbPj20ANjc3AfiHf/iH3+aqq6666qqrrvqPQOWqq6666qqrrrrqqquu+l/r4sWL3O/8+fM8N9u8ILZ5QWzzgtjmBbHN82ObF8Q2V1111VVXXXXVfxoqV1111VVXXXXVVVddddX/aidOnABguVxyP9u8MLZ5QWzz/NjmBbHNC2KbF8Q2D7SxsQHAfffddytXXXXVVVddddV/BCpXXXXVVVddddVVV1111f8611xzzYMBdnd3OX78OABHR0fY5oWxzQtimxfENi+IbV4Q2zw/trnqqquuuuqqq/5LULnqqquuuuqqq6666qqr/s+zzQtimxfENi+IbV4Q27wgtnl+NjY2ALjvvvtu5aqrrrrqqquu+o9C5aqrrrrqqquuuuqqq676X+fMmTMP5kVgmxfGNi+IbV4Q27wgtnlBbPOCbGxsAHD27Nlbueqqq6666qqr/qNQueqqq6666qqrrrrqqqv+17nmmmsefPHiRQBOnDgBwNHREQ9kmxfENi+IbV4Q27wgtnlBbPOC2AZgY2MDgPvuu+9Wrrrqqquuuuqq/yhUrrrqqquuuuqqq6666qr/U2zzgtjmhbHNC2KbF8Q2L4htXhDbXHXVVVddddVV/6moXHXVVVddddVVV1111VX/K+3u7nL8+HEAjo6OsM0LY5sXxDYviG1eENu8MLZ5QWzzQJubmwDcd999t3LVVVddddVVV/1HoXLVVVddddVVV1111VVX/a9z5syZB128eJEXhW1eENu8MLZ5QWzzgtjmBbHN87OxsQHA2bNnn8FVV1111VVXXfUfhcpVV1111VVXXXXVVVdd9b/WiRMnADg6OuK52eaFsc0LYpsXxjYviG1eENtcddVVV1111VX/pahcddVVV1111VVXXXXVVf/rXHPNNQ/mhbDNC2KbF8Y2L4htXhDbvCC2eWFss7m5CcB99913K1ddddVVV1111X8UKlddddVVV1111VVXXXXV/0q7u7scP34cgOVyCYBtXhDbvDC2eUFs88LY5gWxzQtim/ttbGwAcPbs2Vu56qqrrrrqqqv+o1C56qqrrrrqqquuuuqqq/7Xs41tXhDbvCC2eWFs84LY5oWxzQtim6uuuuqqq6666j8dwVVXXXXVVVddddVVV131v84111zz4IsXL3LixAkAjo6OeH5sY5sXxDYviG1s84LY5gWxjW1eENs8t83NTQDuu+++W7nqqquuuuqqq/6jEFx11VVXXXXVVVddddVV/+ucOXPmwbwQtrHNC2Ib27wgtnlBbGObF8Q2L4htbHPVVVddddVVV/2XoXLVVVddddVVV1111VVX/a91/PhxAJbLJfezzQtimxfGNi+MbV4Q27wwtnlBNjY2ALjvvvtu5aqrrrrqqquu+o9E5aqrrrrqqquuuuqqq676X2l3d5cHss0LY5sXxjYviG1eGNu8MLZ5QWyzsbEBwNmzZ2/lqquuuuqqq676j0Tlqquuuuqqq6666qqrrvpf55prrnnwxYsXuZ9tXhDbvDC2eWFs88LY5gWxzQtjG4DNzU0A7rvvvlu56qqrrrrqqqv+I1G56qqrrrrqqquuuuqqq/7XOnHiBABHR0c8N9u8MLZ5YWzzwtjmhbHNC2Kbq6666qqrrrrqvwSVq6666qqrrrrqqquuuup/lWuuuebBPNPx48cBODo64oFs88LY5oWxzQtjmxfENi+MbZ7b5uYmAPfdd9+tXHXVVVddddVV/5GoXHXVVVddddVVV1111VX/K+3u7vLcbPPC2OaFsc0LY5sXxjYvjG2en83NTQDOnj37DK666qqrrrrqqv9IVK666qqrrrrqqquuuuqq/1XOnDnzYJ6LbWzzgtjmX2KbF8Y2L4htXhjbvDC2ueqqq6666qqr/lNQueqqq6666qqrrrrqqqv+17l48SIAJ06cAODo6IgXxDYvjG1eGNu8MLZ5YWzzwthmc3MTgPvuu+9Wrrrqqquuuuqq/0hUrrrqqquuuuqqq6666qr/Va655poH8yKwzQtjmxfGNi+MbV4Y27wwtrnf5uYmAGfPnr2Vq6666qqrrrrqPxKVq6666qqrrrrqqquuuup/nd3dXY4fPw7A0dERD2Sbf4ltXhjbvDC2eWFs88LY5qqrrrrqqquu+i9B5aqrrrrqqquuuuqqq676X+XMmTMP4vmwzb/ENi+MbV4Y2/xLbPPC2Oa5bW5uAnDffffdylVXXXXVVVdd9R+J4Kqrrrrqqquuuuqqq676X+Uf/uEffuf48eOcOHECgKOjI2zzwtjGNi+MbV4Y27wwtrHNC2Ib21x11VVXXXXVVf+lqFx11VVXXXXVVVddddVV/6ucPXv21hMnTvCQhzwEANu8MLZ5YWzzwtjmX2KbF8Y2L8jm5iYA9913361cddVVV1111VX/0Qiuuuqqq6666qqrrrrqqv9V7rvvvlv/4R/+4bdf5mVeBoCjoyOeH9vY5oWxzQtjmxfGNrZ5QWxjmxfENhsbGwCcPXv2Vq666qqrrrrqqv9oBFddddVVV1111VVXXXXV/zo/8iM/8jknTpzg+bGNbV4Y29jmBbGNbV4Y27wwtnlhbAOwubkJwH333XcrV1111VVXXXXVfzSCq6666qqrrrrqqquuuup/nX/4h3/47X/4h3/4bZ7p9OnT2MY2L4xtbPPC2OaFsY1tXhjbvDC2ueqqq6666qqr/ktQjh8/zlVXXXXVVVddddVVV131v8999933jBd7sRd77RtvvPH4gx70IB784AfTdR2SODo64rnZ5oWxzb/ENi+MbV4Y2zy3m266iWuuuYY//dM//el/+Id/+B2uuuqqq6666qr/SJTjx49z1VVXXXXVVVddddVVV/3vc/bs2VuPjo4uHR4e7j7kIQ956a7rOHPmDA960IN48IMfTNd1SOLw8JB/iW1eGNv8S2zzwtjm+XnIQx7CiRMn+O3f/u3vufXWW/+aq6666qqrrrrqPxLl+PHjXHXVVVddddVVV1111VX/O916661//ad/+qc/89u//dvfc+utt/7N4eHh7kMe8pCX7rqOM2fO8KAHPYgHPehB9H0PwNHREQ9km3+JbV4Y2/xLbPOC3HTTTZw4cYI//dM//Zlbb731r7nqqquuuuqqq/4joQc96EFcddVVV1111VVXXXXVVf93XHPNNQ8+c+bMg1/ndV7nvV7ndV7nvXmAw8NDzp49y6233srZs2d5YWzzL7HNC2Obf8nrvu7rcs011/CZn/mZr/MP//APv81VV1111VVXXfUfCT3oQQ/iqquuuuqqq6666qqrrvq/6ZprrnnwmTNnHvxiL/Zir/U6r/M6733NNdc8mGc6PDzk7Nmz3HrrrZw9e5YHss0LY5t/iW1eGNsAvOVbviWbm5t8yId8yEPuu+++W7nqqquuuuqqq/4joQc96EFcddVVV1111VVXXXXVVf8/XHPNNQ9+7dd+7fd6ndd5nfe+5pprHswzHR4ecvbsWZ7+9Kdz9uxZXhjb/Ets88LY5n5v+ZZvyebmJh/yIR/ykPvuu+9Wrrrqqquuuuqq/0joQQ96EFddddVVV1111VVXXXXV/z/XXHPNg1/7tV/7vV78xV/8tV/sxV7stXmmw8NDzp49y9Of/nTOnj3L/WzzL7HNv8Q2D/Qu7/IuALzd272duOqqq6666qqr/qOhBz3oQVx11VVXXXXVVVddddVV/79dc801D37t137t93rxF3/x136xF3ux1+aZDg8POXv2LPfddx9Pf/rTeWFs88LY5vl5l3d5FwDe7u3eTlx11VVXXXXVVf/R0IMe9CCuuuqqq6666qqrrrrqqqvud8011zz4tV/7td/rxV/8xV/7xV7sxV6bZzo8POS+++7j7NmzPP3pT+d+tvmX2Ob52dzc5C3f8i257777bv2QD/mQh3DVVVddddVVV/1Hoxw/fpyrrrrqqquuuuqqq6666qr7HR4e7v7DP/zD7/zWb/3W9/z2b//29xweHu5K4sYbb3zwiRMnuPHGG3nIQx7C8ePH6bqO3d1dXhjbvCAnTpzgoQ99KLfeeutf/9Zv/db3cNVVV1111VVX/UejHD9+nKuuuuqqq6666qqrrrrqqufn8PBw9x/+4R9+57d+67e+57d/+7e/59Zbb/2bzc3N4zfeeOODT5w4wU033cRDHvIQTpw4Qd/37O7ucj/b/EuuueYabrrpJv7hH/7ht//0T//0Z7jqqquuuuqqq/6jUbnqqquuuuqqq6666qqrrnoR3Hfffbfed9993/1bv/Vb333NNdc8+MVe7MVe+3Ve53Xe68Ve7MVe+yEPeQgPechDePEXf3EODw952tOextOf/nReGNtcddVVV1111VX/6ahcddVVV1111VVXXXXVVVf9K91333233nfffd/9W7/1W999zTXXPPjFXuzFXvt1Xud13uvFXuzFXntzc5NrrrmGl3iJl+Dw8JCnPe1pPP3pT+d+trnf5uYmAPfdd9+tXHXVVVddddVV/xmoXHXVVVddddVVV1111VX/aa655poH33fffbfyf9h9991363333ffdv/Vbv/Xd11xzzYNf7MVe7LVf53Ve571e7MVe7LU3Nze55ppreOVXfmUODw952tOextOe9jQODw8B2NzcBODs2bPP4Kqrrrrqqquu+s9A5aqrrrrqqquuuuqqq676D3XNNdc8+LVf+7Xf63Ve53Xe+5prrnnwb/3Wb333b/3Wb33PP/zDP/w2/8fdd999t953333f/Vu/9Vvffc011zz4xV7sxV77xV7sxV7rdV7ndd57c3OTl3iJl+AlXuIlODw85GlPexqbm5tcddVVV1111VX/qdCDHvQgrrrqqquuuuqqq6666qp/n2uuuebBr/3ar/1e7/RO7/TZPNPu7i6XLl3iQQ96ED/yIz/y2T/6oz/6Ofw/dc011zz4xV7sxV77xV7sxV7rdV7ndd6b5/KZn/mZ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VVddddVVV1111VX/wx0/fpxP+7RP44GOjo649dZbOXfuHGfPngXANv8etvm3sM1VV1111VVXXXXV/1BUrrrqqquuuuqqq6666n+oa6655sEAx44dA+Do6Ihbb72VZzzjGRwdHQFgm38P2/xb2eaqq6666qqrrrrqfzgqV1111VVXXXXVVVdd9b/AT/zET3A/2/x72ebfyjb/GpubmwDcd999t3LVVVddddVVV131X4vKVVddddVVV1111VVX/Q93dHSEbf4j2Obfyjb/Wra56qqrrrrqqquu+m9E5aqrrrrqqquuuuqqq/6Hs82/h23+PWzzr2Wbq6666qqrrrrqqv8BqFx11VVXXXXVVVddddX/Ubb5t7LNv4VtHmhzcxOA++6771auuuqqq6666qqr/utRueqqq6666qqrrrrqqv9DbPPvYZt/C9tcddVVV1111VVX/Q9E5aqrrrrqqquuuuqqq/4Huuaaax7MMx0dHfHC2Obfyzb/FrZ5YTY3NwE4e/bsrVx11VVXXXXVVVf916Ny1VVXXXXVVVddddVV/wvZ5j+Cbf6tbHPVVVddddVVV131PxyVq6666qqrrrrqqquu+l/ENv8RbPNvZZsX1ebmJgD33XffrVx11VVXXXXVVVf916Ny1VVXXXXVVVddddVV/wvY5t/LNv8etvnXss1VV1111VVXXXXVfyMqV1111VVXXXXVVVdd9X+cbf49bPNvYZurrrrqqquuuuqq/2ZUrrrqqquuuuqqq6666n+gM2fOPJhnOjw85N/CNv8etvm3sM39Njc3Abjvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq676P8Q2/162+bewzVVXXXXVVVddddX/MFSuuuqqq6666qqrrrrq/wDb/HvZ5t/CNi/I5uYmV1111VVXXXXVVf+NqFx11VVXXXXVVVddddX/Urb5j2CbfyvbvCjOnj37DK666qqrrrrqqqv+61G56qqrrrrqqquuuuqq/2Vs8x/BNv9Wtrnqqquuuuqqq676X4DKVVddddVVV1111VVX/Q90zTXXPJgHsM1/FNv8W9nmqquuuuqqq6666n8RKlddddVVV1111VVXXfU/3OHhIf8RbPNvZZt/i83NTQDuu+++W7nqqquuuuqqq676r0flqquuuuqqq6666qqr/o+zzb+Hbf4tbHPVVVddddVVV13134zKVVddddVVV1111VVX/R9lm38P2/xb2OZ+m5ubAJw9e/ZWrrrqqquuuuqqq/7rUbnqqquuuuqqq6666qr/Q2zz72WbfyvbXHXVVVddddVVV/0PQuWqq6666qqrrrrqqqv+D7DNv5dt/q1s8/xsbm5y1VVXXXXVVVdd9d+IylVXXXXVVVddddVVV/0PdObMmQfxTIeHh7wgtvmPYJt/K9v8S+67775bueqqq6666qqrrvqvR+Wqq6666qqrrrrqqqv+F7LNfwTb/FvZ5qqrrrrqqquuuup/OCpXXXXVVVddddVVV131v4ht/iPY5t/DNv+Szc1Nrrrqqquuuuqqq/6bUbnqqquuuuqqq6666qr/gc6ePfsMHsA2/xFs8+9hm3+t++6771auuuqqq6666qqr/ntQueqqq6666qqrrrrqqv+B7rvvvlv5D2abfw/bXHXVVVddddVVV/0vQ+Wqq6666qqrrrrqqqv+j7PNv4dt/i02NjYAOHv27K1cddVVV1111VVX/fegctVVV1111VVXXXXVVf8DnT179lae6fDwkH8L2/x72ebfwjZXXXXVVVddddVV/wNQueqqq6666qqrrrrqqv+B7rvvvlv5N7LNv5dt/q1sA7C1tQXAfffddytXXXXVVVddddVV/z0Irrrqqquuuuqqq6666n+of/iHf/htgAc/+ME85CEP4UVhm38v2/xb2MY2V1111VVXXXXVVf+DULnqqquuuuqqq6666qr/oT7zMz/zdb7pm77p6Q95yEMe/JCHPIQXe7EXA+DpT386Z8+e5b777uN+tvn3ss2/lW2uuuqqq6666qqr/geiHD9+nKuuuuqqq6666qqrrvqf6s/+7M9+5tZbb/2bzc3N4zfeeOOD+77nmmuu4SEPeQgPechD6LoOgMPDQ/49bPNvZZvn56abbuLaa6/lT//0T3/6H/7hH36Hq6666qqrrrrqqv96VK666qqrrrrqqquuuup/sPvuu+/W++6777t/67d+67uvueaaB7/Yi73Ya7/Yi73Ya73O67zOe29ubvLiL/7iABweHnLffffx9Kc/nfvuu48XlW3+PWxz1VVXXXXVVVdd9T8Y5fjx41x11VVXXXXVVVddddX/BoeHh7u33nrrX//pn/7pz/z2b//29/zpn/7pzwBsbm4eP3HixPETJ07wkIc8hIc85CGcOHGCvu/Z3d3lBbHNv5Vt/iUPfehDOXHiBL/927/9Pbfeeutfc9VVV1111VVXXfVfj8pVV1111VVXXXXVVVf9L3Tffffdet999936D//wD78NcM011zz4tV/7td/rxV/8xV/7xV7sxV77IQ95CA95yEN48Rd/ce677z7uu+8+nv70p3M/2/xb2eaqq6666qqrrrrqfwnK8ePHueqqq6666qqrrrrqqv/tDg8Pd//hH/7hd37rt37re377t3/7e2699da/2dzcPH7jjTc++MSJE9x00028+Iu/OA95yEPoug6Aw8ND/rVs86K66aabOHHiBH/6p3/6M7feeutfc9VVV1111VVXXfVfj8pVV1111VVXXXXVVVf9H3Pffffdet999333b/3Wb333Nddc8+AXe7EXe+0Xe7EXe63XeZ3Xee/NzU1e4iVeAoDDw0Oe9rSncd9993HffffxL7HNv8bm5iYA9913361cddVVV1111VVX/fegHD9+nKuuuuqqq6666qqrrvq/6vDwcPfWW2/96z/90z/9md/+7d/+nltvvfVvDg8Pdx/ykIe8dN/3XHvttTz0oQ/loQ99KCdOnGAYBg4PD3lutvnXeuhDH8rW1ha/9Vu/9T1nz569lauuuuqqq6666qr/euhBD3oQV1111VVXXXXVVVdd9f/NNddc8+AzZ8486HVe53Xe+8Ve7MVe+5prrnkwz3R4eMh9993Hvffey9Of/nRs82/xVm/1VmxubvIhH/IhD7nvvvtu5aqrrrrqqquuuuq/HpWrrrrqqquuuuqqq676f+i+++679b777rv1H/7hH34H4Jprrnnwa7/2a7/Xi7/4i7/2i73Yi732Qx7yEB7ykIfwEi/xEhweHvK0pz2Ne++9l8PDQ14Utrnqqquuuuqqq676HwA96EEP4qqrrrrqqquuuuqqq656tmuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPMDh4SFPe9rTuPfee7nvvvt4fmwD8NZv/dZsbm7yIR/yIQ+57777buWqq6666qqrrrrqvx560IMexFVXXXXVVVddddVVV/17XHPNNQ9+7dd+7ff6h3/4h9/5h3/4h9/m/5BrrrnmwS/2Yi/2Wi/2Yi/22q/zOq/z3jzA4eEhT3va07j33nu57777ALDN/d7t3d4NgLd7u7cTV1111VVXXXXVVf890IMe9CCuuuqqq6666qqrrrrqX+vFXuzFXvvFXuzFXuud3umdPptnuu+++279h3/4h9/++q//+vfh/6BrrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jzA4eEh9957L0972tO49957AXi3d3s3AN7u7d5OXHXVVVddddVVV/33QA960IO46qqrrrrqqquuuuqqf8k111zz4Nd+7dd+r2uuuebBr/M6r/PePNPu7i5/+7d/y+7uLm/5lm/Jb/3Wb33313/9178P/8edOXPmQddcc81DXuzFXuy1XvzFX/y1X+zFXuy1eabDw0PuvfdeHvrQhwLwdm/3duKqq6666qqrrrrqvweVq6666qqrrrrqqquuegGuueaaB7/2a7/2e734i7/4a7/Yi73YawPs7u7yN3/zN1y6dInf/d3f5X4PetCDALjmmmsezP8DZ8+efcbZs2ef8Q//8A+//aM/+qOfc8011zz4tV/7td/rxV/8xV/7xV7sxV77oQ99KAD/8A//8DtcddVVV1111VVX/fehctVVV1111VVXXXXVVQ9wzTXXPPi1X/u13+t1Xud13vuaa655MMDu7i6/+7u/yzOe8Qye8YxncNXzuu+++2790R/90c/50R/90c+55pprHvxiL/Zir33mzJkH/eiP/ujncNVVV1111VVXXfXfh8pVV1111VVXXXXVVf+vXXPNNQ8+c+bMg1/sxV7std7pnd7ps3mm3d1dfvd3f5e//du/ZXd3l3/JpUuXADhz5syD+X/uvvvuu/W+++77bq666qqrrrrqqqv++1G56qqrrrrqqquuuur/nWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPNPu7i5/+7d/y+/+7u/yopIEwPHjx7nqqquuuuqqq6666n8cKlddddVVV1111VVX/b9wzTXXPPi1X/u13+vFX/zFX/vFXuzFXhtgd3eX3/3d3wXgd3/3d3lRSOJ+D3rQg7jlllt4zdd8Te53zTXXPJirrrrqqquuuuqqq/6noHLVVVddddVVV1111f9Z11xzzYNf+7Vf+71e53Ve572vueaaBwPs7u7yu7/7uzzjGc/gGc94Bv8SSdzv2LFjvORLviTHjx/nJV/yJXmgw8NDNjc3ueqqq6666qqrrrrqfxQqV1111VVXXXXVVVf9n3HNNdc8+MVe7MVe+8yZMw96p3d6p8/mmXZ3d/nd3/1d/vZv/5bd3V3+JZK437Fjx3jJl3xJHvSgB/GgBz2IBzo8POTpT386T3/60wF4i7d4C+67775bueqqq6666qqrrrrqfwoqV1111VVXXXXVVVf9r3bNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVem2d6xjOewTOe8Qx+93d/l3+JJB7o2LFjvORLviQv9VIvxbFjx3ig++67j/vuu4+///u/54E2Nze56qqrrrrqqquuuup/HCpXXXXVVVddddVVV/2vc8011zz4tV/7td/rxV/8xV/7xV7sxV4bYHd3l9/93d9ld3eXv/3bv+VfIon7HTt2jOPHj3PLLbfwmq/5mjzQ4eEhT3/60zk6OuLpT386ALa56qqrrrrqqquuuup/BSpXXXXVVVddddVVV/2vcM011zz4tV/7td/rnd7pnT6bZ9rd3eV3f/d3ecYznsEznvEMXhhJPNCxY8d4yZd8SR70oAfxoAc9iAc6PDzk6U9/OmfPnuW+++7jfra56qqrrrrqqquuuup/FSpXXXXVVVddddVVV/2PdM011zz4tV/7td8L4J3e6Z0+m2fa3d3lb//2b/nbv/1bdnd3eWEk8UDHjh3jJV/yJXnQgx7Egx70IB7o8PCQpz/96dx6660cHh7yQLa56qqrrrrqqquuuup/JSpXXXXVVVddddVVV/2P8jqv8zrv/Tqv8zrv9WIv9mKvDbC7u8sznvEMnvGMZ/C7v/u7vDCSeG7Hjh3jJV/yJXnN13xNHujw8JDDw0Puu+8+/uEf/oEXxDZXXXXVVVddddVVV/2vReWqq6666qqrrrrqqv8xXuzFXuy1X+d1Xue9brzxxtf+3d/9XZ7xjGfwjGc8gxdGEg907NgxXvIlXxKA13zN1+SBDg8PefrTn87Zs2e57777eGFsc9VVV1111VVXXXXV/3pUrrrqqquuuuqqq676H+Oaa6558Iu92Iu99t/8zd/wu7/7u7wgknigY8eO8ZIv+ZI86EEP4kEPehAPdHh4yNOf/nTOnj3Lfffdx4vCNlddddVVV1111VVX/Z9A5aqrrrrqqquuuuqq/zHOnDnzIIBLly7xQJJ4bseOHeMlX/IleamXeimOHTvGAx0eHvL0pz+df/iHf+BfwzZXXXXVVVddddVVV/2fQuWqq6666qqrrrrqqv8xrrnmmgcD7O7uIonn9qAHPYhbbrmF13zN1+SBDg8PefrTnw7AP/zDP/CvZZurrrrqqquuuuqqq/5PonLVVVddddVVV1111f84kgA4duwYL/mSL8nx48d5yZd8SR7o8PCQpz/96Zw9e5b77ruPfyvb/EfY3NwE4OzZs7dy1VVXXXXVVVddddX/FFSuuuqqq6666qqrrvof5yVf8iV5yZd8SR70oAfxQIeHhzz96U/n6U9/OoeHh0ji38o2V1111VVXXXXVVVf9n0flqquuuuqqq6666qr/cR70oAdxv/vuu4/77ruPv//7v+e52QZAEv8atrnqqquuuuqqq6666v8FKlddddVVV1111VVX/Y9xzTXXPBjg6U9/Ovfddx9Pf/rTeVHYBkASL4xtrrrqqquuuuqqq676f4XKVVddddVVV1111VX/4zz96U/nvvvu41/LNveTxP1sc9VVV1111VVXXXXV/0tUrrrqqquuuuqqq676P8k2V1111VVXXXXVVVf9v0flqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqqv+z5HE82Obq6666qqrrrrqqqv+X6Fy1VVXXXXVVVddddX/KZJ4QSQBYJv/aJubmwDcd999t3LVVVddddVVV1111f8UBFddddVVV1111VVX/Y9x33333QqwubnJv5YkJPGikIQkrrrqqquuuuqqq676P4/KVVddddVVV1111VX/60ni30ISALa56qqrrrrqqquuuur/JCpXXXXVVVddddVVV/2vJYn/CJIAsM1VV1111VVXXXXVVf+nULnqqquuuuqqq6666n8lSfxHkwSAba666qqrrrrqqquu+j+BylVXXXXVVVddddVV/6tI4j+bJGxz1VVXXXXVVVddddX/elSuuuqqq6666qqrrvpfQxL/VSQBYJurrrrqqquuuuqqq/7XonLVVVddddVVV1111f94kvjvIgkA21x11VVXXXXVVVdd9b8Olauuuuqqq6666qqr/keTxP8EkgCwzVVXXXXVVVddddVV/2sQXHXVVVddddVVV131P5Yk/qeRxFVXXXXVVVddddVV/2tQueqqq6666qqrrrrqf4z77rvvVoDNzU0k8T+VJABsc9VVV1111VVXXXXV/2hUrrrqqquuuuqqq6666t9IEgC22dzcBOC+++67lauuuuqqq6666qqr/qegctVVV1111VVXXXXVVf9Okrjqqquuuuqqq6666n8kKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq676D7C5uQnA2bNnn8FVV1111VVXXXXVVf9TEFx11VVXXXXVVVdd9T/G2bNnnwFwzTXXcNVVV1111VVXXXXVVf8BqFx11VVXXXXVVVdd9T/GP/zDP/z2P/zDP/z2i73Yi732m7/5m3N4eMh9993H2bNnue+++7jqqquuuuqqq6666qp/JSpXXXXVVVddddVVV/2Pcd999936Iz/yI5/zTu/0TrzYi73Ya29ubnLNNdcAcHh4yH333cett97Kfffdx/Mjif8otrnqqquuuuqqq6666n89KlddddVVV1111VVX/Y/yD//wD7/9mZ/5mb99zTXXPPjFXuzFXvvFXuzFXut1Xud13ntzc5OHPOQhPOQhD+Hw8JCzZ89y3333ceutt/KfQRLPzTZXXXXVVVddddVVV/2vQuWqq6666qqrrrrqqv+R7rvvvlvvu+++7/6t3/qt7/7RH/3Rzzlz5syDXuzFXuy1X/zFX/y1X+zFXuy1Nzc3efCDH8yLvdiLcXh4yNmzZ7nvvvs4e/Ys/1kk8UC2ueqqq6666qqrrrrqfzQqV1111VVXXXXVVVf9j3fffffdet999936D//wD7/zoz/6o59zzTXXPPjFXuzFXvt1Xud13uvFXuzFXntzc5NrrrmGF3uxF+Pw8JCzZ8/y9Kc/nbNnz/KfSRJXXXXVVVddddVVV/2PRuWqq6666qqrrrrqqv917rvvvlvvu+++7/6t3/qt777mmmse/GIv9mKv/WIv9mKv9Tqv8zrvvbm5yebmJg9+8IM5PDzk7Nmz3Hfffdx66638Z5LEVVddddVVV1111VX/41C56qqrrrrqqquuuup/tfvuu+/W++6777t/67d+67t/9Ed/9HNs+3Ve53Xe+8Vf/MVf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6qqrrrrqqqv+D5HECyOJf4kk/iWSuOqqq6666qqrrrrqqv8FqFx11VVXXXXVVVf9LyGJF0YSL4wk/iWS+JdI4gU5c+bMg7nqqquuuuqqq6666qr/OQiuuuqqq6666qqr/ge57777bgXY3NzkgSTxwkjihZHEv0QSL4wkJHHVVVddddVVV1111VX/i1C56qqrrrrqqquu+h9OEi+MJF4YSbwwkviXSOKqq6666qqrrrrqqqv+FyK46qqrrrrqqquu+h/k7NmztwJsbm4CIIkXRhIvjCReGEn8SyTxLzk8POSqq6666qqrrrrqqqv+B6Jy1VVXXXXVVVdd9b+UJF4YSbwwknhhJPEvkcRVV1111VVXXXXVVVf9D0blqquuuuqqq6666n8oSbwgknhhJPHCSOKFkcQLI4mrrrrqqquuuuqqq676X4Dgqquuuuqqq6666n+Q++6771aAra0t/q0k8cJI4gWRhCReGEm8INdcc82Dueqqq6666qqrrrrqqv85qFx11VVXXXXVVVf9LyOJF0QSL4wkXhBJvDCSuOqqq6666qqrrrrqqv9lCK666qqrrrrqqqv+B7nvvvtuBdjc3OT5kcQLIokXRBKSeEEk8cJI4oU5Ojriqquuuuqqq6666qqr/geictVVV1111VVXXfW/hCReEEm8IJJ4YSTxgkjihZHEVVddddVVV1111VVX/Q9G5aqrrrrqqquuuup/AUm8IJJ4QSTxgkjihZHECyOJq6666qqrrrrqqquu+h+O4Kqrrrrqqquuuup/kLNnzz4DYHNzk/tJ4gWRxAsiiRdEEi+IJCTxgkhCEi/INddc82Cuuuqqq6666qqrrrrqfwYqV1111VVXXXXVVf+DSeIFkcQLIokXRBIviCReGElcddVVV1111VVXXXXV/yJUrrrqqquuuuqqq/4Hue+++24F2Nzc5IWRxAsiiRdEEi+IJF4QSbwwkrjqqquuuuqqq6666qr/gahcddVVV1111VVX/Q8liedHEi+IJF4QSbwgknhBJPGCSALg6OiIq6666qqrrrrqqquu+h+IylVXXXXVVVddddX/EZJ4QSTx/EjiBZHECyKJq6666qqrrrrqqquu+l+A4Kqrrrrqqquuuup/kLNnz94KsLm5yfMjiedHEi+IJJ4fSbwgknhBJPHCnDlz5sFcddVVV1111VVXXXXV/wxUrrrqqquuuuqqq/6XkMTzI4nnRxIviCSeH0m8IJK46qqrrrrqqquuuuqq/2WoXHXVVVddddVVV/0vIInnRxLPjyReEEk8P5J4QSTxgkjiqquuuuqqq6666qqr/oeictVVV1111VVXXfU/yH333XcrwObmJveTxPMjiedHEi+IJJ4fSTw/knhBJHG/o6Mjrrrqqquuuuqqq6666n8gKlddddVVV1111VX/g0ni+ZHE8yOJ50cSz48kXhBJPD+SuOqqq6666qqrrrrqqv8lCK666qqrrrrqqqv+h7nvvvtuBdja2uL5kcTzI4nnRxLPjySeH0lI4vmRxFVXXXXVVVddddVVV/0vQnDVVVddddVVV131P9SLvdiLcebMGR5IEs+PJJ4fSTw/knh+JPH8SEISz48kHuiaa655MFddddVVV1111VVXXfU/A5Wrrrrqqquuuuqq/2E+8zM/87W/+Zu/+dYHP/jBPPjBD+bw8JCzZ89y9uxZDg8POXv2LA8kiedHEs+PJJ4fSTw/knh+JHHVVVddddVVV1111VX/w1G56qqrrrrqqquu+h/oMz/zM1/nxV7sxV7rxV/8xV/7xV7sxV57c3OTBz/4wQAcHh5y9uxZbr31Vs6dO8fzI4nnRxLPTRLPjySeH0lcddVVV1111VVXXXXV/xJUrrrqqquuuuqqq/6HOXv27DPOnj37jH/4h3/47R/90R/9nGuuuebBL/ZiL/ZaL/ZiL/bar/M6r/Pem5ubbG5u8uAHP5jDw0POnj3L2bNnOXv2LEdHR0jiuUni+ZHE8yOJ50cSz89yueSqq6666qqrrrrqqqv+B6Jy1VVXXXXVVVdd9T/cfffdd+t9991362/91m99z4/+6I9+zpkzZx78Yi/2Yq/14i/+4q/9Yi/2Yq+9ubnJgx/8YACOjo44e/Ysz3jGMzh79iwAknh+JPH8SOK5SeL5kcRVV1111VVXXXXVVVf9D0blqquuuuqqq6666n+R++6779b77rvv1n/4h3/47R/90R/9nGuuuebBL/ZiL/baL/ZiL/Zar/M6r/PeGxsbPOhBD+JBD3oQR0dHnD17lnPnznH27FmOjo64nySemySeH0k8P5K46qqrrrrqqquuuuqq/+Eox48f56qrrrrqqquuuup/q8PDw91bb731r//0T//0Z377t3/7e/70T//0p++7775bJXHjjTc++Pjx49xwww08/OEP50EPehDHjh1jmiaOjo54IEk8N0lI4rlJQhIPdOzYMa6//noAnv70p//1P/zDP/wOV1111VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrq/6JrrrnmwS/2Yi/22i/2Yi/2Wq/zOq/z3jzA0dER586d4+zZs5w/f56joyMeSBLPjySemyRuvvlmXvqlXxqAr//6r3+f3/qt3/purrrqqquuuuqqq6666r8fetCDHsRVV1111VVXXXXVf6Rrrrnmwffdd9+t/A9yzTXXPPjMmTMPfrEXe7HXevEXf/HXfrEXe7HX5gGOjo44d+4ct912G+fPn+e5SeL5kQTAqVOneNVXfVUAvv7rv/59fuu3fuu7ueqqq6666qqrrrrqqv9+6EEPehBXXXXVVVddddVV/x7XXHPNg1/sxV7stc+cOfOgd3qnd/rs++6779Yf/dEf/Zzf+q3f+m7+hzpz5syDXvzFX/x1XuzFXuy1Xud1Xue9eYCjoyPOnTvH+fPnOXfuHMvlkucmiQc6deoUr/qqrwrAZ37mZ77OP/zDP/w2V1111VVXXXXVVVdd9d8PPehBD+Kqq6666qqrrrrqX+uaa6558Gu/9mu/14u/+Iu/9ou92Iu9Ns/H273d24n/Ba655poHnzlz5sEv9mIv9lov/uIv/tov9mIv9to8wNHREefPn+e2227j/PnzSOK5nT59mld5lVcB4EM+5EMect99993KVVddddVVV1111VVX/fdDD3rQg7jqqquuuuqqq656UVxzzTUPfu3Xfu33ep3XeZ33vuaaax7MM+3u7vI3f/M3/M3f/A0PetCDeKu3eisA3u7t3k78L3TNNdc8+MVe7MVe+8Ve7MVe63Ve53Xemwc4Ojri/PnznD9/nvPnz3N0dIQkTp06xau8yqsA8HZv93biqquuuuqqq6666qqr/mdAD3rQg7jqqquuuuqqq656fq655poHv/Zrv/Z7XXPNNQ9+ndd5nffmmXZ3d/mbv/kbAH7nd36HB3qrt3orXuqlXgqAD/mQD3nIfffddyv/i505c+ZB11xzzUNe7MVe7LVe/MVf/LVf7MVe7LV5gKOjI86fP89yueSRj3wkAG/3dm8nrrrqqquuuuqqq6666n8GKlddddVVV1111VUPcM011zz4tV/7td/rxV/8xV/7xV7sxV6bZ9rd3eVv/uZvuPXWW3nGM57BC/KgBz2I/0vOnj37jLNnzz7jH/7hH377R3/0Rz/nmmuuefCLvdiLvdaLvdiLvfbrvM7rvPfGxgYbGxvc77777ruVq6666qqrrrrqqquu+p+DylVXXXXVVVdd9f/aNddc8+AXe7EXe+0zZ8486J3e6Z0+mwe49dZbecYznsHv/M7v8KI6fvw49ztz5syD77vvvlv5P+S+++679b777rv1t37rt77nR3/0Rz/nzJkzD36xF3ux13rxF3/x1wb4+q//+vfhqquuuuqqq6666qqr/uegctVVV1111VVX/b9zzTXXPPi1X/u13+vFX/zFX/vFXuzFXptn2t3d5W/+5m+49dZbecYznsG/hiRe6qVeCoC/+Zu/4UEPehD/191333233nfffbf+wz/8w2//6I/+6Odw1VVXXXXVVVddddVV//NQueqqq6666qqr/l94sRd7sdd+sRd7sdd6p3d6p8/mAXZ3d/mbv/kb/vqv/5pLly7xryUJgOPHj/NSL/VSAFy6dImrrrrqqquuuuqqq6666n8EKlddddVVV1111f9J11xzzYNf+7Vf+71e/MVf/HVe7MVe7LV4pt3dXf76r/8aSfzO7/wO/xaSOH78OMeOHeNBD3oQr/Var8UDXbp0iUuXLnHNNdc8+B/+4R+46qqrrrrqqquuuuqqq/7bULnqqquuuuqqq/7PuOaaax782q/92u/1Oq/zOu99zTXXPJhn2t3d5a//+q95xjOewTOe8Qz+rU6cOMFLvuRL8uAHP5gHPehBPNDh4SEAm5ub3O/MmTMP4qqrrrrqqquuuuqqq67670Tlqquuuuqqq676X+uaa6558Gu/9mu/F8A7vdM7fTbPtLu7y6233sqtt97K7/zO7wAgiX+L48eP81Iv9VK81Eu9FMePH+eBDg8PefrTn87Tn/50jo6OeLEXezFe/MVfnGPHjnHVVVddddVVV1111VVX/Y9A5aqrrrrqqquu+l/lmmuuefBrv/Zrv9eLv/iLv86LvdiLvRbPtLu7y1//9V/zjGc8g1tvvRUASUjiX+P48eO81Eu9FMePH+elXuqleKDDw0Oe/vSnA/D3f//33E8SDySJS5cucdVVV1111VVXXXXVVVf9t6Ny1VVXXXXVVVf9r/BiL/Zir/25n/u5v8UD7O7u8td//df8zd/8Dbu7u9xPEv8ax48f56Ve6qV40IMexIMf/GAe6PDwkKc97Wncd999nD17ln+Na6655sFcddVVV1111VVXXXXVVf+dqFx11VVXXXXVVf/jvdiLvdhrv9M7vdNn7e7u8td//dcA/M7v/A7PTRIviuPHj/OgBz2I48eP81qv9Vo80OHhIYeHh9x77738/d//PQ8kiecmifsdHR0BcOzYMS5dusQ111zzYK666qqrrrrqqquuuuqq/05Urrrqqquuuuqq//Fe53Ve571e7MVe7LV/5md+hr/+67/mgSTxojh+/Dgv9VIvxYMe9CAe/OAH80CHh4c87WlP49577+W+++5DEs9NEs9NEg90eHgIwLFjx7h06RJXXXXVVVddddVVV1111X87KlddddVVV1111f94L/ZiL/baALfeeiv3k8S/5EEPehAPfvCDea3Xei2e2+HhIU972tN42tOexuHhIfeTxHOTxHOTxAsiiUuXLnHy5Emuuuqqq6666qqrrrrqqv9WVK666qqrrrrqqv/RXud1Xue9r7nmmgcD7O7uIokX5Pjx47zUS70UD3rQg3jwgx/MAx0eHvLUpz6Vw8NDnva0pyGJ/2xnzpx5MFddddVVV1111VVXXXXVfycqV1111VVXXXXV/2gv9mIv9loAf/M3f4Mkntvx48d5qZd6KV7qpV6K48eP80AHBwc87WlP47777uPee+/lXyKJ5yaJ5yaJ5yaJo6MjAI4dO8alS5e46qqrrrrqqquuuuqqq/7bUbnqqquuuuqqq/5He7EXe7HXBvjrv/5rAI4fP85LvdRLAfBar/VaPNDBwQGHh4fce++9/O3f/i2SeH4k8dwk8dwk8dwk8dwk8dwkcdVVV1111VVXXXXVVVf9t6Ny1VVXXXXVVVf9j3bNNdc8GODBD34wr/Var8WDH/xgHujg4ICnPe1p3Hvvvdx77738SyTxH0kS9zs8PATg2LFjXLp0iWuuuebBXHXVVVddddVVV1111VX/nahcddVVV1111VX/Y73O67zOe/NMr/Var8X97r33Xu655x6e9rSncXh4yPMjiReVJJ6bJJ6bJP61rrnmmgffd999t3LVVVddddVVV1111VVX/XegctVVV1111VVX/Y93cHDAU5/6VO69917uvfdeHkgSLypJPDdJPDdJPDdJPDdJPLfDw0M2Nzc5duwYV1111VVXXXXVVVddddV/O4Krrrrqqquuuup/rDNnzjwI4KlPfSp/+7d/y7333ssDSeL5kcR/Nkk8N0ncb29vD4AzZ848mKuuuuqqq6666qqrrrrqvwvBVVddddVVV131P9bZs2efAbC1tcVzk8TzI4nnRxLPTRLPTRLPTRL/EkkAHB0dAXDs2DGuuuqqq6666qqrrrrqqv92VK666qqrrrrqqv+x7rvvvlsBtra2+PeQxHOTxHOTxHOTxHOTxANJ4vm5dOkSV1111VVXXXXVVVddddV/K4Krrrrqqquuuup/HUk8P5L4zyaJF9WlS5e45pprHsxVV1111VVXXXXVVVdd9d+F4Kqrrrrqqquu+h/r7NmztwJsbm7ybyWJ5yaJ5yaJ5yaJB5LEc5PEAx0eHgJw7Ngxrrrqqquuuuqqq6666qr/dlSuuuqqq6666qr/VSTx/Eji30oSz00S/xJJPJAkjo6OADh27BgAZ86ceRBXXXXVVVddddVVV1111X8XKlddddVVV1111f9Y9913360AW1tb/FtI4rlJ4t9CEg8kiX/J3t4eV1111VVXXXXVVVddddV/K4Krrrrqqquuuup/tPvuu+9WgK2tLSTx/EjiuUniuUniuUniuUnigSTxL5HE83PNNdc8mKuuuuqqq6666qqrrrrqvwvBVVddddVVV131P9rZs2dvBdjc3OT5kcR/JEn8SyTxQJK43+HhIQDHjh3j0qVLXHXVVVddddVVV1111VX/rQiuuuqqq6666qr/FSTxopLEc5PEc5PEv0QSDySJB5LEAy2XSwCOHTsGwDXXXPNgrrrqqquuuuqqq6666qr/LgRXXXXVVVddddX/aPfdd9+tAJubmzw3SfxbSeK5SeKBJPHvsbe3x1VXXXXVVVddddVVV13134rKVVddddVVV131P9p99913K8DW1hYvCkk8N0n8SyTxL5HEA0nigSTx3M6cOfNgrrrqqquuuuqqq6666qr/LlSuuuqqq6666qr/lSTx3CTx3CTx3CTxL5HEA0nigSTxQJIAODw8BODYsWPs7e1x1VVXXXXVVVddddVVV/23onLVVVddddVVV/2Pdvbs2WcAbG5u8h9BEs9NEg8kiQeSxAsjiauuuuqqq6666qqrrrrqfyQqV1111VVXXXXV/2j33XffrQBbW1vcTxLPTRLPTRL/Ekn8a0niBTk6OgJgZ2cHSVxzzTUP5qqrrrrqqquuuuqqq67670Llqquuuuqqq676P0kSz00S/xJJPJAkHkgSDySJB5LE/S5dusRVV1111VVXXXXVVVdd9d+K4Kqrrrrqqquu+h/t7NmztwJsbm4CIInnJol/iSSemyQeSBIPJIkHksQDSeKBJAFwdHQEwLFjxwC45pprHsxVV1111VVXXXXVVVdd9d+BylVXXXXVVVdd9b+GJJ6bJJ6bJP4lkviPJInntre3x1VXXXXVVVddddVVV13134rgqquuuuqqq676H+2+++67FWBra4t/K0n8SyTxQJJ4IEk8kCRekKOjIwB2dnYAOHPmzIO56qqrrrrqqquuuuqqq/47EFx11VVXXXXVVf/j3XfffbcCbG5u8kCSeG6S+JdI4oEk8UCSeCBJPJAkHkgS95PEA+3t7XHVVVddddVVV1111VVX/bchuOqqq6666qqr/se77777bgXY2trihZHEc5PEA0ni30MSDySJf8k111zzYK666qqrrrrqqquuuuqq/w5Urrrqqquuuuqq/5Uk8S+RxL9EEg8kiQeSxAsiiQeSBMDR0REAx44dY29vj6uuuuqqq6666qqrrrrqvw2Vq6666qqrrrrqf7yzZ8/eCrC5uQmAJJ6bJP4lknggSTyQJB5IEg8kiRdEEvc7PDwEYGdnB4AzZ848iKuuuuqqq6666qqrrrrqvwPBVVddddVVV131P9599913K8C1117Ltddey4tCEg8kiX8PSTyQJO4niQeSxFVXXXXVVVddddVVV131PwKVq6666qqrrrrqf7x/+Id/+J1/+Id/+O0Xe7EXe+2HPvShHB4ecu+993Lfffdx7733cnR0xANJ4l8iiQeSxANJ4gWRxAsiiftJYm9vj6uuuuqqq6666qqrrrrqvw3l+PHjXHXVVVddddVV/7OdPXv2VkCHh4e7R0dHuzfeeOODT5w4wU033cSjH/1oHvrQh3LixAmGYeDw8BBJPJAkHkgSDySJB5LEA0nigSRxP0ncTxIAGxsbXH/99ezt7bG3t8dsNrv1T//0T3+Gq6666qqrrrrqqquuuuq/GpWrrrrqqquuuup/hd/6rd/67t/6rd/6boBrrrnmwS/2Yi/2Wi/2Yi/22q/zOq/z3pubmzzkIQ/hIQ95CIeHhxweHnLfffdx3333cd999/GvIYkHksQDSeJ+knh+jo6OANjZ2WFvb49rrrnmwVx11VVXXXXVVVddddVV/x2oXHXVVVddddVV/+vcd999t9533323/tZv/db3/OiP/ujnnDlz5sEv9mIv9lov/uIv/tov9mIv9tqbm5tcc801ABweHnLfffdx9uxZnv70pyOJB5LEi0oSL4gk7ieJq6666qqrrrrqqquuuup/BPSgBz2Iq6666qqrrrrq/45rrrnmwS/2Yi/22i/2Yi/2Wi/2Yi/22tdcc82DeYDDw0POnj3L05/+dM6dO8cDSeKBJHE/STyQJO4niftJ4vTp07zaq70ad9xxB49//OOptX7313/9178PV1111VVXXXXVVVddddV/NSpXXXXVVVddddX/Kffdd9+t991333f/1m/91ncDnDlz5kEv/uIv/jqv8zqv814v9mIv9tqbm5tsbm7y4Ac/mMPDQ46Ojrj11ls5Ojri7Nmz3E8SL4gk7ieJ53Z0dATAzs4ON910E/fccw9XXXXVVVddddVVV1111X8L9KAHPYirrrrqqquuuuo/3zXXXPPg137t136vH/3RH/0c/ptcc801Dz5z5syDX+zFXuy1XvzFX/y1X+zFXuy1eYDDw0POnj3LuXPneMYznsH9JHE/STyQJO4nCYCNjQ3e4A3egL29PQC+93u/931+67d+67u56qqrrrrqqquuuuqqq/6roQc96EFcddVVV1111VX/8a655poHnzlz5sEv9mIv9lrv9E7v9Nk802/91m9992/91m99zz/8wz/8Nv/Nrrnmmge/2Iu92Gu/2Iu92Gu9zuu8znvzXI6OjnjGM57B2bNnOXfuHACSuJ8k7ieJ+0niLd/yLbnfh3zIhzzkvvvuu5Wrrrrqqquuuuqqq6666r8aetCDHsRVV1111VVXXfUf45prrnnwa7/2a7/Xi7/4i7/Oi73Yi70Wz7S7uwvA8ePHAfjMz/zM1/mHf/iH3+Z/mGuuuebBL/ZiL/bar/M6r/NeL/ZiL/baPMDR0RHnzp3j7NmzHB0dcf78eR5IEveTxFu+5Vtyv7d7u7cTV1111VVXXXXVVVddddV/BypXXXXVVVddddW/2TXXXPPgM2fOPPjFXuzFXuud3umdPpsH2N3d5a//+q+59dZbufXWW3npl35p3vqt3xqAa6655sH/8A//wP80991336333Xffd//Wb/3Wd19zzTUPPnPmzINe53Ve572vueaaB7/Yi73Ya99yyy3ccsstABwdHXHu3DnOnTvH7bffzv0kAXB0dMTGxgZXXXXVVVddddVVV1111X8rKlddddVVV1111b/KNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe22eaXd3l93dXZ7+9KfzO7/zOzy3137t1+Z+Z86ceRD/w91333233nfffbf+wz/8w+8AXHPNNQ9+sRd7sdd+sRd7sdd6ndd5nffe2Njglltu4ZZbbuHRj340R0dHnD9/nnPnznH+/Hnu91u/9VvfzVVXXXXVVVddddVVV13134XKVVddddVVV131Ql1zzTUPPnPmzINf7MVe7LXe6Z3e6bN5gN3dXf7qr/6KW2+9lVtvvRVJvCDHjx8H4O677+aaa655MP/L3Hfffbfed9993/1bv/Vb3/31X//173PNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVee2Njg9OnT/OoRz2Ko6MjNjY2ALjvvvtu5aqrrrrqqquuuuqqq67670Llqquuuuqqq656Htdcc82DX/u1X/u9XvzFX/y1X+zFXuy1eYBbb72Vpz/96fz1X/81u7u7AEhCEi/IS7/0SwPwpCc9CYBrrrnmwfwvd9999936oz/6o5/zoz/6o59z5syZB734i7/467zYi73Ya11zzTUPfrEXe7HXBviHf/iH3/6Hf/iH3+Gqq6666qqrrrrqqquu+u9C5aqrrrrqqquuuuzFXuzFXvvFXuzFXut1Xud13vuaa655MM+0u7vLX/3VX3Hrrbdy66238kCSeFE8+MEPBuDuu+9me3ub2WzG/yVnz559xm/91m9992/91m99N8A111zz4Bd7sRd7rd/6rd/6Hq666qqrrrrqqquuuuqq/05Urrrqqquuuur/qWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPMDu7i5/9Vd/xV//9V+zu7vLc5PEi+r48eO89Eu/NAB3330329vbnDlz5sH8H3bffffdet99993KVVddddVVV1111VVXXfXfjcpVV1111VVX/T9yzTXXPPi1X/u13+t1Xud13vuaa655MM+0u7vLX/3VX3Hrrbdy66238oJI4kVx/PhxXvqlX5qXfumX5vjx4wDs7+9zcHDA3XffzU033cRVV1111VVXXXXVVVddddV/ASpXXXXVVVdd9X/YNddc8+DXfu3Xfq8Xf/EXf+0Xe7EXe20eYHd3l7/6q7/ir//6r9nd3eWFkcQLc/z4cV76pV+aBz/4wTz4wQ/mgQ4ODtja2kIS97vmmmsezFVXXXXVVVddddVVV1111X8+KlddddVVV131f8w111zz4Nd+7dd+r9d5ndd572uuuebBPNPu7i5/9Vd/xe7uLn/913/Ni0ISL8jx48d56Zd+aV76pV+a48eP80AHBwc89alP5d577+Xw8JC3eZu3AUASBwcHAFxzzTUPvu+++27lqquuuuqqq6666qqrrrrqPw+Vq6666qqrrvo/4nVe53Xe+8M//MO/iwfY3d3lr/7qr/jrv/5rdnd3eVFI4vk5fvw4L/3SL82DH/xgHvzgB/NABwcH3HvvvRwcHPC3f/u3PJAkALa2tnigM2fOPPi+++67lauuuuqqq6666qqrrrrqqv88VK666qqrrrrq/4DXeZ3Xee93eqd3+uzd3V3+6q/+CoDf/u3f5l9DEs/t+PHjvPRLvzQv/dIvzfHjx3mgg4MDnvrUp3LPPfdw7733AiCJ5+fg4ICtrS22trY4ODjgqquuuuqqq6666qqrrrrqvwiVq6666qqrrvo/4B3f8R0/68yZMw/6ru/6Lm699Vb+tSQBcPz4cV76pV+aBz/4wTz4wQ/mgQ4ODjg4OOCee+7hb//2b3luknhukgA4PDxka2uL7e1tDg8POTg44JprrnnwP/zDP3DVVVddddVVV1111VVXXfWfiMpVV1111VVX/S/3Oq/zOu99zTXXPBjg1ltv5V9DEsePH+elX/qleemXfmmOHz/OAx0cHPCUpzyFe++9l3vuuYf7SeJfIokXZH9/nzNnzjyIq6666qqrrrrqqquuuuqq/1xUrrrqqquuuup/uRd7sRd7LYC//uu/5kVx/PhxXuZlXobjx4/z0i/90jzQwcEBBwcH3HPPPfz1X/81knhuknhuknhhDg4OuPbaa9ne3uaee+4B4JprrnkwV1111VVXXXXVVVddddVV/7moXHXVVVddddX/cq/zOq/z3gC/9Vu/xQty/PhxXvqlX5qXeZmX4fjx4zzQwcEBT3nKU7jnnnu45557uJ8k/q0k8UCHh4cAbG1tIYnDw0OuueaaB3PVVVddddVVV1111VVXXfWfi8pVV1111VVX/S/2Oq/zOu8NcOutt7K7u8v9jh8/zku/9Etz4sQJXvqlX5oHOjg44ODggLvvvpu//uu/RhIvKkk8N0n8Sw4ODgDY3t4GYH9/n77vueqqq6666qqrrrrqqquu+k9G5aqrrrrqqqv+F3ud13md9wL4q7/6K44fP85Lv/RL8zIv8zIcP36cBzo4OODJT34y99xzD/fccw//Ekm8KCTx3CTx3I6OjgDY2toC4ODggEc96lEP5qqrrrrqqquuuuqqq6666j8Xlauuuuqqq676X+zFXuzFXhvgbd7mbXigg4MD9vf3ueeee/irv/orACTx7yGJ/wiSODw85Kqrrrrqqquuuuqqq6666r8Alauuuuqqq676X+rFXuzFXpsHODg44ElPehL33HMP99xzDy8KSTw3STw3STw3STw3STw3SRwcHACwtbXF/a655poHc9VVV1111VVXXXXVVVdd9Z+LylVXXXXVVVf9L3dwcMCP/MiPACCJ50cS/xNsbW0BcHBwAMA111zz4Pvuu+9Wrrrqqquuuuqqq6666qqr/nMQXHXVVVddddX/U5J4bpJ4bpJ4bpJ4bpJ4bpIAODw85H7b29tIAuCaa655MFddddVVV1111VVXXXXVVf95CK666qqrrrrqf6mzZ8/eyotAEv8dJPFA9957LwBbW1scHBwAcObMmQdz1VVXXXXVVVddddVVV131n4fKVVddddVVV/0vdd99990KsLW1BYAkXlSSeG6SeG6SeG6SeG6S+Nc6ODjgzJkzD+Kqq6666qqrrrrqqquuuuo/D8FVV1111VVX/S/2D//wD78NcP311/P8SOK/gySe2+HhIQBbW1tI4uDggKuuuuqqq6666qqrrrrqqv9kVK666qqrrrrq/xlJPDdJPDdJPDdJPDdJ/EskcXh4CMDW1hb3u+aaax7CVVddddVVV1111VVXXXXVfx6Cq6666qqrrvpf7L777rsVYHt7m/8OknhuknhRHB4ecs011zyYq6666qqrrrrqqquuuuqq/zwEV1111VVXXfW/2H333XcrwNbWFs9NEs9NEs9NEs9NEs9NEv8WkgA4PDwEYGtrC0kcHBxw1VVXXXXVVVddddVVV131n4zgqquuuuqqq/4X+4d/+IffAbjuuuv4ryaJ5yaJB5LE/Q4ODgDY2toC4PDwkGuuuebBXHXVVVddddVVV1111VVX/eehctVVV1111VX/B0niuUniRSGJ5yaJf6/Dw0MANjc3ATg8POTMmTMP4qqrrrrqqquuuuqqq6666j8PwVVXXXXVVVf9L3b27NlbAba3t/m3kMS/hSSemyQeSBIPJIn7SeJ+11xzzYO56qqrrrrqqquuuuqqq676z0Fw1VVXXXXVVf+L3XfffbcCbG1tcT9J/FtJ4rlJ4l8iiX/J4eEhAFtbWwAcHBwAcObMmQdz1VVXXXXVVVddddVVV131n4Pgqquuuuqqq/6Xu++++24F2Nra4gWRxHOTxL+FJP4lknggSQAcHh4CsLm5yVVXXXXVVVddddVVV1111X8Bgquuuuqqq676X+7s2bO3AmxvbyOJfytJPDdJ/Esk8aI6PDwEYHt7m6OjIwCuueaaB3PVVVddddVVV1111VVXXfWfg+Cqq6666qqr/pe77777bgXY2tri+ZHEc5PEv4Uk/iWSeCBJvCD33nsvZ86ceRBXXXXVVVddddVVV1111VX/OahcddVVV1111f9y9913360AW1tb/FtJ4rlJ4l8iiQeSxAtzeHgIwObmJpK46qqrrrrqqquuuuqqq676T0blqquuuuqqq/6XO3v27DMAtre3eW6SeG6S+LeQxL+WJB7o8PAQgK2tLQAODw+55pprHsxVV1111VVXXXXVVVddddV/DipXXXXVVVdd9b/cfffddyvA1tYW/xaSeG6S+JdI4oEk8UCSeCBJ3G9zcxOAw8NDrrnmmgdz1VVXXXXVVVddddVVV131n4PKVVddddVVV/0vd/bs2VsBtra2eCBJPDdJ/FtI4j/CfffdB8Dm5iaSADhz5syDueqqq6666qqrrrrqqquu+s9B5aqrrrrqqquueg6S+JdI4oEk8UCSeCBJPJAkAA4PD7nqqquuuuqqq6666qqrrvpPRHDVVVddddVV/8vdd999t9533323bm1tsbW1BYAknpsknpsk/iWS+I9yeHgIwObmJgCHh4dcc801D+aqq6666qqrrrrqqquuuuo/B8FVV1111VVX/R9w9uzZWwG2trb495DEA0niuUnigSTxQJJ4IEk8P5I4OjoC4JprrnkwV1111VVXXXXVVVddddVV//EIrrrqqquuuur/kOuuu47rrruO5yaJ5yaJfy1J/GtI4oGOjo4A2Nzc5IHOnDnzYK666qqrrrrqqquuuuqqq/7jUbnqqquuuuqq/wN+5Ed+5HPe8R3fkZd5mZd5bYCDgwPuuece7rnnHg4ODrj33nv5l0jigSTxL5HEA0niX3J4eMjm5iabm5scHR1x1VVXXXXVVVddddVVV131n4hy/Phxrrrqqquuuup/u7Nnz94qicPDw93Nzc3jJ06cOH7y5EluueUWHv7wh/Pwhz+ckydPMpvNuHDhApJ4bpJ4IEk8kCSemyTuJ4kHksQDSQLgxhtvZHNzk7vuuovDw0Me8pCH8OQnP/l3br311r/mqquuuuqqq6666qqrrrrqPxaVq6666qqrrvo/4rd+67e+57d+67e+B+Caa6558Iu92Iu99ou92Iu91uu8zuu899bWFg9/+MN5+MMfzqu92qtxcHDAvffey1Oe8hTuvfdeJPFAkviXSOLfY3NzE4DDw0POnDnzIK666qqrrrrqqquuuuqqq/7jUbnqqquuuuqq/4Puu+++W++7777v/q3f+q3v/tEf/dHPAXixF3ux136d13md93qxF3ux197a2mJra4uHPexhHBwccHh4yD333MO9997Lvffey3OTxANJ4oEk8UCSeCBJ3O++++7jmmuuYWNjA0lsbm5y9uzZZ3DVVVddddVVV1111VVXXfUfj8pVV1111VVX/R9333333Qpw3333ffdv/dZvffeZM2cedM011zzkxV7sxV7rxV/8xV/7xV7sxV57a2uLa6+9FoCDgwPuvfde7r33Xg4PD7n33nv595DEA0kCQBIAm5ub3Hfffbdy1VVXXXXVVVddddVVV131Hw896EEP4qqrrrrqqqv+P7vmmmse/GIv9mKv9WIv9mKvfc011zz4xV7sxV6bBzg8POTee+/l3nvv5WlPexqSeCBJPJAkHkgS95PEgx/8YF7xFV+RW2+9lfvuu49XfMVX5O3e7u3EVVddddVVV1111VVXXXXVfzz0oAc9iKuuuuqqq6666tmuueaaB7/Yi73Ya7/Yi73Ya73O67zOe/NcDg8Puffee7nvvvt42tOehiQeSBL3k8QDSeLMmTO8zuu8Dvfddx9HR0c8/elP/+6v//qvfx+uuuqqq6666qqrrrrqqqv+46EHPehBXHXVVVddddVVL9g111zz4Bd7sRd77dd5ndd5rxd7sRd7bR7g8PAQgKc97Wncd999nD17lgeSxP0kAbC5ucmbvdmbcXh4CMB3fdd3vc9v/dZvfTdXXXXVVVddddVVV1111VX/8dCDHvQgrrrqqquuuuqqF82ZM2cedM011zzkxV7sxV7rxV/8xV/7xV7sxV6bBzg8POTw8JCnP/3pHB0dcd9993E/SQBsbm7yZm/2ZhweHrK5ucmHfMiHPOS+++67lauuuuqqq6666qqrrrrqqv946EEPehBXXXXVVVddddW/zTXXXPPgF3uxF3utF3uxF3vta6655sEv9mIv9to8wOHhIffddx9nz57l8PCQs2fPAvCO7/iO3O/t3u7txFVXXXXVVVddddVVV1111X8O9KAHPYirrrrqqquuuuo/xjXXXPPgF3uxF3vtF3uxF3utF3uxF3vta6655sE8wOHhIWfPnuXMmTNsbm7yW7/1W9/z9V//9e/NVVddddVVV1111VVXXXXVfw70oAc9iKuuuuqqq6666j/HNddc8+AXe7EXe+0Xe7EXe63XeZ3XeW+ey9d//de/z2/91m99N1ddddVVV1111VVXXXXVVf850IMe9CCuuuqqq6666qr/Gtdcc82DX+zFXuy1X+d1Xue9fuRHfuRz/uEf/uG3ueqqq6666qqrrrrqqquu+s+DHvSgB3HVVVddddVVV1111VVXXXXVVVddddVVV/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/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y80lIzVmDNlXAAAAABJRU5ErkJggg==) @@ -74,29 +81,28 @@ example = extrude(exampleSketch, length = 1) // Pattern a whole sketch on face. size = 100 case = startSketchOn(XY) - |> startProfile(at = [-size, -size]) - |> line(end = [2 * size, 0]) - |> line(end = [0, 2 * size]) - |> tangentialArc(endAbsolute = [-size, size]) - |> close(%) - |> extrude(length = 65) + |> startProfile(at = [-size, -size]) + |> line(end = [2 * size, 0]) + |> line(end = [0, 2 * size]) + |> tangentialArc(endAbsolute = [-size, size]) + |> close(%) + |> extrude(length = 65) thing1 = startSketchOn(case, face = END) - |> circle(center = [-size / 2, -size / 2], radius = 25) - |> extrude(length = 50) + |> circle(center = [-size / 2, -size / 2], radius = 25) + |> extrude(length = 50) thing2 = startSketchOn(case, face = END) - |> circle(center = [size / 2, -size / 2], radius = 25) - |> extrude(length = 50) + |> circle(center = [size / 2, -size / 2], radius = 25) + |> extrude(length = 50) - // We pass in the "case" here since we want to pattern the whole sketch. +// We pass in the "case" here since we want to pattern the whole sketch. // And the case was the base of the sketch. -patternLinear3d( - case, - axis = [1, 0, 0], - distance = 250, - instances = 2, -) +patternLinear3d(case, + axis= [1, 0, 0], + distance= 250, + instances=2, + ) ``` ![Rendered example of patternLinear3d 2](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAD96UlEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+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/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/6vonLVVVddddVVV/2fd8011zyYZzpz5syDr7nmmgfzTGfOnHkQD3DNNdc8mH+j++6771ae6ezZs8/gme67775bAc6ePXsrwH333XcrV131/9Q111zzYIAzZ848GOCaa655MM905syZB/EA11xzzYN50QgwD3Dffffdevbs2WecOXPmQWfPnn0Gz3TffffdCnD27NlbAe67775bueqqq6666qqr/i+jctVVV1111VVX/a90zTXXPBjgzJkzD36xF3ux1wK45pprHnzNNdc8GODMmTMPvuaaax7Mf4ALFy7wQCdPnuTf67777rsV4OzZs7fed999twLcd999t549e/YZ9913361nz5699b777ruVq676X+Kaa6558JkzZx58zTXXPPjMmTMPArjmmmsefM011zz4zJkzD77mmmsezH+ACxcucL+TJ0/yH+G+++67FeDs2bO3Atx3333PuO+++55+9uzZZwDcd999t549e/bW++6771auuuqqq6666qr/bdCDHvQgrrrqqquuuuqq/3muueaaB585c+bB11xzzYMBXuzFXuy1rrnmmgefOXPmwddcc82DeQEuXLgAwMWLF7lw4QIAFy5cAODixYsAXLhwgftdvHgRgAsXLvDvdfLkSR7oxIkTAJw8eZL7nThxgpMnTwJw8uRJTpw4wcmTJ3lB7rvvvlvPnj1763333Xfrfffdd+vZs2efcd999936D//wD7/NVVf9F7rmmmseDPBiL/Zir33mzJkHXXPNNQ8GeJ3XeZ335gW4cOECABcuXADgwoULXLhwAYALFy4AcOHCBe534cIFAC5cuMCLyjbPz8mTJ3mgkydPAnDy5EkATp48CcCpU6cAOHnyJCdPngTg5MmTvCD33XffrWfPnr31vvvuuxXQP/zDP/z2fffdd+vZs2dvve+++27lqquuuuqqq676nwY96EEP4qqrrrrqqquu+u9zzTXXPPjFXuzFXvvMmTMPuuaaax58zTXXPPjFXuzFXpvn48KFC1y8eJELFy5w4cIFAJ761KcCcPHiRS5cuMD/VidPngTgxIkTnDx5EoCHPexhnDx5EoCHPexhPLf77rvv1rNnz95633333foP//APv3Pffffd+g//8A+/zVVX/Ttdc801D36xF3ux1z5z5syDXvzFX/y1X+zFXuy1eT4uXLjAhQsXeMpTngLAhQsXuHDhAhcuXODChQv8d7PNv9XJkycBOHnyJCdPnuTkyZOcOnWKkydPcvLkSU6ePMlzu++++26VpL//+7//LYB/+Id/+J377rvv1n/4h3/4ba666qqrrrrqqv8u6EEPehBXXXXVVVddddV/vmuuuebBZ86cefCLvdiLvdY111zz4GuuuebBL/ZiL/baPJcLFy7w1Kc+lQsXLnDx4kUuXLjAU5/6VK6CkydPcuLECU6ePMnDHvYwTp48ycMe9jAe6L777rsV4B/+4R9++x/+4R9+57777rv1H/7hH36bq656Aa655poHv/Zrv/Z7Abz4i7/4a7/Yi73Ya/MAFy5c4MKFCzzlKU8B4KlPfSoXLlzgwoUL/GvY5n8a2/x7nDx5kpMnT3Ly5Eke8YhHAHDy5Eke/vCH80Bnz559hm3/wz/8w2//wz/8w+/cd999t549e/bW++6771auuuqqq6666qr/bOhBD3oQV1111VVXXXXVf6xrrrnmwWfOnHnwi73Yi73Wi7/4i7/2i73Yi702z+XChQs89alP5eLFizz1qU/lqU99Klf925w4cYKTJ09y4sQJHvawh3Hy5Eke9rCHcb/77rvv1rNnz97693//97/9D//wD7/zD//wD7/NVf9vXXPNNQ9+7dd+7fd68Rd/8dd+sRd7sdfmAS5cuMBTnvIULly4wFOf+lSe8pSn8F/FNv+T2Obf4+TJk5w8eZKTJ0/yiEc8gpMnT/Lwhz+cB7rvvvtuPXv27K333Xffrb/1W7/1Pf/wD//w21x11VVXXXXVVf/R0IMe9CCuuuqqq6666qp/n2uuuebBr/3ar/1eAO/0Tu/02TzAhQsXuHjxIk996lMBeOpTn8pTn/pUrvrPdeLECU6ePMmJEyd4hVd4BR72sIdxv/vuu+/Ws2fP3vr3f//3v/0P//APv/MP//APv81V/2ddc801D37t137t93rxF3/x136xF3ux1+aZLly4wIULF3jqU5/KU57yFJ761Kdim/+pbPM/iW3+LU6ePMnDH/5wHvGIR3Dy5Eke/vCHc7+zZ88+w7b/4R/+4bf/4R/+4Xfuu+++W//hH/7ht7nqqquuuuqqq/490IMe9CCuuuqqq6666qp/nWuuuebBr/3ar/1eL/7iL/7aL/ZiL/baPMCFCxf48z//cwD+7M/+jIsXL3LV/wwnTpzgYQ97GA972MN4hVd4Be5333333foP//APv/0P//APv/Nbv/Vb381V/+u92Iu92Gu/2Iu92Gu90zu902fzTBcuXODChQs89alP5SlPeQpPfepT+bewzf9Etvmfwjb/GidPnuThD384j3jEIzh58iQPf/jDud/Zs2ef8fd///e/9Q//8A+/c9999936D//wD7/NVVddddVVV131r4Ee9KAHcdVVV1111VVXvXDXXHPNg1/7tV/7vQDe6Z3e6bN5pgsXLgDw53/+5zz1qU/lqU99Klf973DixAkAXuEVXoGHPexhPOxhDwPgvvvuu/Uf/uEffvsf/uEffue3fuu3vpur/td4x3d8x88CeKd3eqfP5pkuXLjAn/3Zn/GUpzyFpz71qfxXsc3/NLb572abF8XJkyc5efIkD3/4w3nEIx7Bwx/+cO5333333foP//APv/MP//APv/0P//APv33ffffdylVXXXXVVVdd9cKgBz3oQVx11VVXXXXVVc/rmmuuefBrv/Zrv9eLv/iLv/aLvdiLvTbPdOHCBf78z/+cpz71qTz1qU/lv4Mk/i+xzX+3EydO8LCHPYxXeIVX4GEPexgA9913363/8A//8Nu/9Vu/9T3/8A//8Ntc9T/ONddc8+DXfu3Xfq93eqd3+mye6cKFC/zZn/0Zv/Irv8L/VLb5n8Q2/91s84KcPHmSkydP8vCHP5xHPOIRPPzhD+d+9913363/8A//8Nu/9Vu/9T3/8A//8NtcddVVV1111VXPDT3oQQ/iqquuuuqqq6664sVe7MVe+8Ve7MVe653e6Z0+m2e6cOECf/7nf87TnvY0nvrUp3LV/33Hjx/nYQ97GK/wCq/Awx72MADuu+++W3/rt37ru3/7t3/7e+67775bueq/zTXXXPPg137t136v13md13nva6655sEAFy5c4M/+7M/41V/9VV5Utvmfyjb/U9jmv5ttHujkyZM8/OEP5xGPeAQnT57k4Q9/OAD33Xffrf/wD//w2//wD//wO7/1W7/13Vx11VVXXXXVVQDoQQ96EFddddVVV131/9mLvdiLvfaLvdiLvdY7vdM7fTbPdPHiRf7sz/6MP//zP+fixYtc9f/XiRMnePmXf3le4RVegRMnTnDffffd+g//8A+//Vu/9Vvf8w//8A+/zVX/Za655poHv+M7vuNnvc7rvM57A1y4cIE/+7M/41d/9Vf5z2Kb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Ng8kCds8kCRs80CSsM0DScI2DyQJ2zyQJGzzQJKwzQNJwjYPJAnbPJAkbPNAkrDNVf/zHTt2DID77rvvVq666qqrrvqfjspVV1111VX/4/3Wb/3W9wC8zuu8zntz1VVX/Z/wIz/yI5/9D//wD7/N/xO//du//T0A7/RO7/TZXHXVVf8n/NZv/dZ3/+iP/ujncNVVV1111f906EEPehBXXXXVVVf9z3fNNdc8mP8kti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUk8gG1LEg9g25LEA9i2JPEAti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUk8gG1LEg9g25LEA9i2JPEAti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUk8gG1LEg9g25LEA9i2JPEAti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUn33Xffrfw/c8011zwYwLYliQewbUniAWxbkngA25YkHsC2JYkHsG1J4gFsW5J4ANuWJB7AtiWJB7BtSeIBbFuSeADbliQewLYliQewbUniAWxbkngA25YkHsC2JYkHsG1J4gFsW5J4ANuWJB7AtiWJB7BtSeIBbFuSeADbliQewLYliQewbUniAWxbkngA25YkHsC2JYkHsG1J4gFsW5J4ANuWJB7AtiWJB7BtSeIBbFuSeADbliQewLYliQewbUniAWxbkngA25YkHsC2JYkHsG1J4gFsW5J4ANuWJB7AtiWJB7BtSeIBbFuSeADbliQewLYlCeC+++67lauuuuqqq/43QA960IO46qqrrrrqqquuuuqqq6666qqrrrrqqqv+T6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/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+r+IfAdCwJMO1SDrVAAAAAElFTkSuQmCC) @@ -105,24 +111,23 @@ patternLinear3d( // Pattern an object on a face. size = 100 case = startSketchOn(XY) - |> startProfile(at = [-size, -size]) - |> line(end = [2 * size, 0]) - |> line(end = [0, 2 * size]) - |> tangentialArc(endAbsolute = [-size, size]) - |> close(%) - |> extrude(length = 65) + |> startProfile(at = [-size, -size]) + |> line(end = [2 * size, 0]) + |> line(end = [0, 2 * size]) + |> tangentialArc(endAbsolute = [-size, size]) + |> close(%) + |> extrude(length = 65) thing1 = startSketchOn(case, face = END) - |> circle(center = [-size / 2, -size / 2], radius = 25) - |> extrude(length = 50) + |> circle(center =[-size / 2, -size / 2], radius = 25) + |> extrude(length = 50) // We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face. -patternLinear3d( - thing1, - axis = [1, 0, 0], - distance = size, - instances = 2, - useOriginal = true, +patternLinear3d(thing1, + axis = [1, 0, 0], + distance = size, + instances =2, + useOriginal = true ) ``` diff --git a/docs/kcl-std/functions/std-solid-patternTransform.md b/docs/kcl-std/functions/std-solid-patternTransform.md index 59a4fe0d7..11feab8f7 100644 --- a/docs/kcl-std/functions/std-solid-patternTransform.md +++ b/docs/kcl-std/functions/std-solid-patternTransform.md @@ -12,7 +12,7 @@ patternTransform( @solids: [Solid; 1+], instances: number(_), transform: fn(number(_)): { }, - useOriginal?: boolean, + useOriginal?: bool, ): [Solid; 1+] ``` @@ -61,7 +61,7 @@ Its properties are: | `solids` | [`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) | The solid(s) to duplicate. | Yes | | `instances` | [`number(_)`](/docs/kcl-std/types/std-types-number) | 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. | Yes | | `transform` | [`fn(number(_)): { }`](/docs/kcl-std/types/std-types-fn) | 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. | Yes | -| `useOriginal` | `boolean` | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. | No | +| `useOriginal` | [`bool`](/docs/kcl-std/types/std-types-bool) | If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. | No | ### Returns diff --git a/docs/kcl-std/subtract.md b/docs/kcl-std/functions/std-solid-subtract.md similarity index 99% rename from docs/kcl-std/subtract.md rename to docs/kcl-std/functions/std-solid-subtract.md index b75b9c5d2..104441758 100644 --- a/docs/kcl-std/subtract.md +++ b/docs/kcl-std/functions/std-solid-subtract.md @@ -9,25 +9,29 @@ Subtract removes tool solids from base solids, leaving the remaining material. ```kcl subtract( - @solids: [Solid], + @solids: [Solid; 1+], tools: [Solid], - tolerance?: number, -): [Solid] + tolerance?: number(Length), +): [Solid; 1+] ``` -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. +Performs a bool 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. ### Arguments | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl-std/types/std-types-Solid) | The solids to use as the base to subtract from. | Yes | +| `solids` | [`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) | The solids to use as the base to subtract from. | Yes | | `tools` | [`[Solid]`](/docs/kcl-std/types/std-types-Solid) | The solids to subtract. | Yes | -| `tolerance` | [`number`](/docs/kcl-std/types/std-types-number) | The tolerance to use for the subtraction operation. | No | +| `tolerance` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The tolerance to use for the subtraction operation. | No | ### Returns -[`[Solid]`](/docs/kcl-std/types/std-types-Solid) +[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) ### Examples @@ -35,22 +39,21 @@ Performs a boolean subtraction operation, removing the volume of one or more too ```kcl // Subtract a cylinder from a cube using the stdlib functions. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> translate(z = 1) -subtractedPart = subtract([part001], tools = [part002]) +subtractedPart = subtract([part001], tools=[part002]) ``` ![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==) @@ -60,20 +63,19 @@ subtractedPart = subtract([part001], tools = [part002]) // NOTE: This will not work when using codemods through the UI. // Codemods will generate the stdlib function call instead. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> translate(z = 1) // This is the equivalent of: subtract([part001], tools=[part002]) subtractedPart = part001 - part002 diff --git a/docs/kcl-std/union.md b/docs/kcl-std/functions/std-solid-union.md similarity index 99% rename from docs/kcl-std/union.md rename to docs/kcl-std/functions/std-solid-union.md index 13ce1afc4..c06e73c03 100644 --- a/docs/kcl-std/union.md +++ b/docs/kcl-std/functions/std-solid-union.md @@ -9,9 +9,9 @@ Union two or more solids into a single solid. ```kcl union( - @solids: [Solid], - tolerance?: number, -): [Solid] + @solids: [Solid; 2+], + tolerance?: number(Length), +): [Solid; 1+] ``` @@ -20,12 +20,12 @@ union( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `solids` | [`[Solid]`](/docs/kcl-std/types/std-types-Solid) | The solids to union. | Yes | -| `tolerance` | [`number`](/docs/kcl-std/types/std-types-number) | The tolerance to use for the union operation. | No | +| `solids` | `[Solid; 2+]` | The solids to union. | Yes | +| `tolerance` | [`number(Length)`](/docs/kcl-std/types/std-types-number) | The tolerance to use for the union operation. | No | ### Returns -[`[Solid]`](/docs/kcl-std/types/std-types-Solid) +[`[Solid; 1+]`](/docs/kcl-std/types/std-types-Solid) ### Examples @@ -33,20 +33,19 @@ union( ```kcl // Union two cubes using the stdlib functions. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> translate(z = 1) unionedPart = union([part001, part002]) ``` @@ -58,20 +57,19 @@ unionedPart = union([part001, part002]) // NOTE: This will not work when using codemods through the UI. // Codemods will generate the stdlib function call instead. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> translate(z = 1) // This is the equivalent of: union([part001, part002]) unionedPart = part001 + part002 @@ -84,23 +82,22 @@ unionedPart = part001 + part002 // NOTE: This will not work when using codemods through the UI. // Codemods will generate the stdlib function call instead. - fn cube(center, size) { - return startSketchOn(XY) - |> startProfile(at = [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) + return startSketchOn(XY) + |> startProfile(at = [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(center = [0, 0], size = 10) part002 = cube(center = [7, 3], size = 5) - |> translate(z = 1) + |> 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 ``` diff --git a/docs/kcl-std/index.md b/docs/kcl-std/index.md index 4205b9fa7..90f841906 100644 --- a/docs/kcl-std/index.md +++ b/docs/kcl-std/index.md @@ -93,13 +93,13 @@ layout: manual * [`chamfer`](/docs/kcl-std/functions/std-solid-chamfer) * [`fillet`](/docs/kcl-std/functions/std-solid-fillet) * [`hollow`](/docs/kcl-std/functions/std-solid-hollow) - * [`intersect`](/docs/kcl-std/intersect) - * [`patternCircular3d`](/docs/kcl-std/patternCircular3d) - * [`patternLinear3d`](/docs/kcl-std/patternLinear3d) + * [`intersect`](/docs/kcl-std/functions/std-solid-intersect) + * [`patternCircular3d`](/docs/kcl-std/functions/std-solid-patternCircular3d) + * [`patternLinear3d`](/docs/kcl-std/functions/std-solid-patternLinear3d) * [`patternTransform`](/docs/kcl-std/functions/std-solid-patternTransform) * [`shell`](/docs/kcl-std/functions/std-solid-shell) - * [`subtract`](/docs/kcl-std/subtract) - * [`union`](/docs/kcl-std/union) + * [`subtract`](/docs/kcl-std/functions/std-solid-subtract) + * [`union`](/docs/kcl-std/functions/std-solid-union) * [**std::transform**](/docs/kcl-std/modules/std-transform) * [`mirror2d`](/docs/kcl-std/functions/std-transform-mirror2d) * [`rotate`](/docs/kcl-std/rotate) diff --git a/docs/kcl-std/modules/std-solid.md b/docs/kcl-std/modules/std-solid.md index 6221a7230..4c5757347 100644 --- a/docs/kcl-std/modules/std-solid.md +++ b/docs/kcl-std/modules/std-solid.md @@ -15,11 +15,11 @@ This module contains functions for modifying solids, e.g., by adding a fillet or * [`chamfer`](/docs/kcl-std/functions/std-solid-chamfer) * [`fillet`](/docs/kcl-std/functions/std-solid-fillet) * [`hollow`](/docs/kcl-std/functions/std-solid-hollow) -* [`intersect`](/docs/kcl-std/intersect) -* [`patternCircular3d`](/docs/kcl-std/patternCircular3d) -* [`patternLinear3d`](/docs/kcl-std/patternLinear3d) +* [`intersect`](/docs/kcl-std/functions/std-solid-intersect) +* [`patternCircular3d`](/docs/kcl-std/functions/std-solid-patternCircular3d) +* [`patternLinear3d`](/docs/kcl-std/functions/std-solid-patternLinear3d) * [`patternTransform`](/docs/kcl-std/functions/std-solid-patternTransform) * [`shell`](/docs/kcl-std/functions/std-solid-shell) -* [`subtract`](/docs/kcl-std/subtract) -* [`union`](/docs/kcl-std/union) +* [`subtract`](/docs/kcl-std/functions/std-solid-subtract) +* [`union`](/docs/kcl-std/functions/std-solid-union) diff --git a/docs/kcl-std/std.json b/docs/kcl-std/std.json index 0bbe203af..e7d4b983f 100644 --- a/docs/kcl-std/std.json +++ b/docs/kcl-std/std.json @@ -86605,4849 +86605,6 @@ ] ] }, - { - "name": "intersect", - "summary": "Intersect returns the shared volume between multiple solids, preserving only overlapping regions.", - "description": "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.", - "tags": [ - "solid" - ], - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solids to intersect.", - "labelRequired": false - }, - { - "name": "tolerance", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TyF64", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ], - "nullable": true, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": false, - "description": "The tolerance to use for the intersection operation.", - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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 |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\nintersectedPart = intersect([part001, part002])", - false - ], - [ - "// 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 |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n// This is the equivalent of: intersect([part001, part002])\nintersectedPart = part001 & part002", - false - ] - ] - }, { "name": "involuteCircular", "summary": "Extend the current sketch with a new involute circular curve.", @@ -138602,12889 +133759,6 @@ ] ] }, - { - "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 orientation of the solid with respect to the center of the circle is maintained.", - "description": "", - "tags": [ - "solid" - ], - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Which solid(s) to pattern", - "labelRequired": false - }, - { - "name": "instances", - "type": "number", - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "snippetValueArray": [ - "1", - "0", - "0" - ], - "description": "The axis around which to make the pattern. This is a 3D vector", - "labelRequired": true - }, - { - "name": "center", - "type": "Point3d", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_3_of_TyF64", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 3, - "minItems": 3, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "snippetValueArray": [ - "0", - "0", - "0" - ], - "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": "Nullable_double", - "type": "number", - "format": "double", - "nullable": true, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": false, - "description": "The arc angle (in degrees) to place the repetitions. Must be greater than 0. Defaults to 360.", - "labelRequired": true - }, - { - "name": "rotateDuplicates", - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": false, - "description": "Whether or not to rotate the duplicates as they are copied. Defaults to true.", - "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": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - [ - "// / Pattern using a named axis.\n\n\nexampleSketch = startSketchOn(XZ)\n |> circle(center = [0, 0], radius = 1)\n\nexample = extrude(exampleSketch, length = -5)\n |> patternCircular3d(\n axis = X,\n center = [10, -20, 0],\n instances = 11,\n arcDegrees = 360,\n rotateDuplicates = true,\n )", - false - ], - [ - "// / Pattern using a raw axis.\n\n\nexampleSketch = 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 )", - false - ] - ] - }, { "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.", @@ -161146,9678 +143420,6 @@ ] ] }, - { - "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": [ - "solid" - ], - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solid(s) to duplicate", - "labelRequired": false - }, - { - "name": "instances", - "type": "number", - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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": "TyF64", - "type": "number", - "format": "double", - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "Distance between each repetition. Also known as 'spacing'.", - "labelRequired": true - }, - { - "name": "axis", - "type": "Point3d", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Array_size_3_of_TyF64", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 3, - "minItems": 3, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "snippetValueArray": [ - "1", - "0", - "0" - ], - "description": "The axis of the pattern. A 3D 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": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - [ - "// / Pattern using a named axis.\n\n\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [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 = X, instances = 7, distance = 6)", - false - ], - [ - "// / Pattern using a raw axis.\n\n\nexampleSketch = startSketchOn(XZ)\n |> startProfile(at = [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)", - false - ], - [ - "// Pattern a whole sketch on face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = END)\n |> circle(center = [-size / 2, -size / 2], radius = 25)\n |> extrude(length = 50)\n\nthing2 = startSketchOn(case, face = 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)", - false - ], - [ - "// Pattern an object on a face.\nsize = 100\ncase = startSketchOn(XY)\n |> startProfile(at = [-size, -size])\n |> line(end = [2 * size, 0])\n |> line(end = [0, 2 * size])\n |> tangentialArc(endAbsolute = [-size, size])\n |> close(%)\n |> extrude(length = 65)\n\nthing1 = startSketchOn(case, face = 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)", - false - ] - ] - }, { "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.", @@ -220861,6456 +193463,6 @@ ] ] }, - { - "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": [ - "solid" - ], - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "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_TyF64", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ], - "nullable": true, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": false, - "description": "The tolerance to use for the subtraction operation.", - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "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 |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\nsubtractedPart = subtract([part001], tools = [part002])", - false - ], - [ - "// 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 |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n// This is the equivalent of: subtract([part001], tools=[part002])\nsubtractedPart = part001 - part002", - false - ] - ] - }, { "name": "subtract2d", "summary": "Use a 2-dimensional sketch to cut a hole in another 2-dimensional sketch.", @@ -266736,4853 +232888,6 @@ ] ] }, - { - "name": "union", - "summary": "Union two or more solids into a single solid.", - "description": "", - "tags": [ - "solid" - ], - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "description": "The solids to union.", - "labelRequired": false - }, - { - "name": "tolerance", - "type": "number", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TyF64", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ], - "nullable": true, - "definitions": { - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": false, - "description": "The tolerance to use for the union operation.", - "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", - "sectional", - "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": { - "description": "The units of the solid.", - "allOf": [ - { - "$ref": "#/components/schemas/UnitLen" - } - ] - }, - "sectional": { - "description": "Is this a sectional solid?", - "type": "boolean" - } - } - }, - "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 (interiorAbsolute kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (endAbsolute 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" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "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", - "xAxis", - "yAxis" - ], - "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" - } - ] - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis" - ], - "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" - } - ] - }, - "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": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "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": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - [ - "// Union two cubes using the stdlib functions.\n\n\nfn cube(center, size) {\n return startSketchOn(XY)\n |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\nunionedPart = union([part001, part002])", - false - ], - [ - "// 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 |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 5)\n |> translate(z = 1)\n\n// This is the equivalent of: union([part001, part002])\nunionedPart = part001 + part002", - false - ], - [ - "// 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 |> startProfile(at = [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(center = [0, 0], size = 10)\npart002 = cube(center = [7, 3], size = 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", - false - ] - ] - }, { "name": "xLine", "summary": "Draw a line relative to the current origin to a specified distance away from the current position along the 'x' axis.", diff --git a/rust/kcl-derive-docs/src/example_tests.rs b/rust/kcl-derive-docs/src/example_tests.rs index ae55dc345..de89e6b30 100644 --- a/rust/kcl-derive-docs/src/example_tests.rs +++ b/rust/kcl-derive-docs/src/example_tests.rs @@ -133,6 +133,19 @@ pub const TEST_NAMES: &[&str] = &[ "std-solid-shell-4", "std-solid-shell-5", "std-solid-shell-6", + "std-solid-patternLinear3d-0", + "std-solid-patternLinear3d-1", + "std-solid-patternLinear3d-2", + "std-solid-patternLinear3d-3", + "std-solid-patternCircular3d-0", + "std-solid-patternCircular3d-1", + "std-solid-intersect-0", + "std-solid-intersect-1", + "std-solid-union-0", + "std-solid-union-1", + "std-solid-union-2", + "std-solid-subtract-0", + "std-solid-subtract-1", "std-transform-mirror2d-0", "std-transform-mirror2d-1", "std-transform-mirror2d-2", diff --git a/rust/kcl-lib/src/docs/kcl_doc.rs b/rust/kcl-lib/src/docs/kcl_doc.rs index 8b571d6c0..51b04f43e 100644 --- a/rust/kcl-lib/src/docs/kcl_doc.rs +++ b/rust/kcl-lib/src/docs/kcl_doc.rs @@ -618,6 +618,12 @@ impl FnData { pub(super) fn to_autocomplete_snippet(&self) -> String { if self.name == "loft" { return "loft([${0:sketch000}, ${1:sketch001}])".to_owned(); + } else if self.name == "union" { + return "union([${0:extrude001}, ${1:extrude002}])".to_owned(); + } else if self.name == "subtract" { + return "subtract([${0:extrude001}], tools = [${1:extrude002}])".to_owned(); + } else if self.name == "intersect" { + return "intersect([${0:extrude001}, ${1:extrude002}])".to_owned(); } else if self.name == "clone" { return "clone(${0:part001})".to_owned(); } else if self.name == "hole" { @@ -802,15 +808,12 @@ impl ArgData { return Some((index + n - 1, snippet)); } match self.ty.as_deref() { - Some(s) if s.starts_with("number") => Some((index, format!(r#"{label}${{{}:3.14}}"#, index))), - Some("Point2d") => Some(( - index + 1, - format!(r#"{label}[${{{}:3.14}}, ${{{}:3.14}}]"#, index, index + 1), - )), + Some(s) if s.starts_with("number") => Some((index, format!(r#"{label}${{{}:10}}"#, index))), + Some("Point2d") => Some((index + 1, format!(r#"{label}[${{{}:0}}, ${{{}:0}}]"#, index, index + 1))), Some("Point3d") => Some(( index + 2, format!( - r#"{label}[${{{}:3.14}}, ${{{}:3.14}}, ${{{}:3.14}}]"#, + r#"{label}[${{{}:0}}, ${{{}:0}}, ${{{}:0}}]"#, index, index + 1, index + 2 diff --git a/rust/kcl-lib/src/docs/mod.rs b/rust/kcl-lib/src/docs/mod.rs index f158105ac..62f93df76 100644 --- a/rust/kcl-lib/src/docs/mod.rs +++ b/rust/kcl-lib/src/docs/mod.rs @@ -578,12 +578,6 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { fn to_autocomplete_snippet(&self) -> Result { if self.name() == "loft" { return Ok("loft([${0:sketch000}, ${1:sketch001}])".to_string()); - } else if self.name() == "union" { - return Ok("union([${0:extrude001}, ${1:extrude002}])".to_string()); - } else if self.name() == "subtract" { - return Ok("subtract([${0:extrude001}], tools = [${1:extrude002}])".to_string()); - } else if self.name() == "intersect" { - return Ok("intersect([${0:extrude001}, ${1:extrude002}])".to_string()); } else if self.name() == "subtract2D" { return Ok("subtract2d(${0:%}, tool = ${1:%})".to_string()); } @@ -994,7 +988,7 @@ mod tests { panic!(); }; let snippet = fillet_fn.to_autocomplete_snippet(); - assert_eq!(snippet, r#"fillet(radius = ${0:3.14}, tags = [${1:tag_or_edge_fn}])"#); + assert_eq!(snippet, r#"fillet(radius = ${0:10}, tags = [${1:tag_or_edge_fn}])"#); } #[test] @@ -1014,11 +1008,14 @@ mod tests { #[test] fn get_autocomplete_snippet_pattern_circular_3d() { // We test this one specifically because it has ints and floats and strings. - let pattern_fn: Box = Box::new(crate::std::patterns::PatternCircular3D); - let snippet = pattern_fn.to_autocomplete_snippet().unwrap(); + let data = kcl_doc::walk_prelude(); + let DocData::Fn(data) = data.find_by_name("patternCircular3d").unwrap() else { + panic!(); + }; + let snippet = data.to_autocomplete_snippet(); assert_eq!( snippet, - r#"patternCircular3d(${0:%}, instances = ${1:10}, axis = [${2:1}, ${3:0}, ${4:0}], center = [${5:0}, ${6:0}, ${7:0}])"# + r#"patternCircular3d(instances = ${0:10}, axis = [${1:1}, ${2:0}, ${3:0}], center = [${4:0}, ${5:0}, ${6:0}])"# ); } @@ -1040,7 +1037,7 @@ mod tests { }; let snippet = circle_fn.to_autocomplete_snippet(); assert_eq!( - snippet, r#"circle(center = [${0:0}, ${1:0}], diameter = ${2:3.14})"#, + snippet, r#"circle(center = [${0:0}, ${1:0}], diameter = ${2:10})"#, "actual = left, expected = right" ); } @@ -1115,28 +1112,37 @@ mod tests { let snippet = helix_fn.to_autocomplete_snippet(); assert_eq!( snippet, - r#"helix(revolutions = ${0:3.14}, angleStart = ${1:3.14}, radius = ${2:3.14}, axis = ${3:X}, length = ${4:3.14})"# + r#"helix(revolutions = ${0:10}, angleStart = ${1:10}, radius = ${2:10}, axis = ${3:X}, length = ${4:10})"# ); } #[test] fn get_autocomplete_snippet_union() { - let union_fn: Box = Box::new(crate::std::csg::Union); - let snippet = union_fn.to_autocomplete_snippet().unwrap(); + let data = kcl_doc::walk_prelude(); + let DocData::Fn(data) = data.find_by_name("union").unwrap() else { + panic!(); + }; + let snippet = data.to_autocomplete_snippet(); assert_eq!(snippet, r#"union([${0:extrude001}, ${1:extrude002}])"#); } #[test] fn get_autocomplete_snippet_subtract() { - let subtract_fn: Box = Box::new(crate::std::csg::Subtract); - let snippet = subtract_fn.to_autocomplete_snippet().unwrap(); + let data = kcl_doc::walk_prelude(); + let DocData::Fn(data) = data.find_by_name("subtract").unwrap() else { + panic!(); + }; + let snippet = data.to_autocomplete_snippet(); assert_eq!(snippet, r#"subtract([${0:extrude001}], tools = [${1:extrude002}])"#); } #[test] fn get_autocomplete_snippet_intersect() { - let intersect_fn: Box = Box::new(crate::std::csg::Intersect); - let snippet = intersect_fn.to_autocomplete_snippet().unwrap(); + let data = kcl_doc::walk_prelude(); + let DocData::Fn(data) = data.find_by_name("intersect").unwrap() else { + panic!(); + }; + let snippet = data.to_autocomplete_snippet(); assert_eq!(snippet, r#"intersect([${0:extrude001}, ${1:extrude002}])"#); } @@ -1197,7 +1203,7 @@ mod tests { panic!(); }; let snippet = offset_plane_fn.to_autocomplete_snippet(); - assert_eq!(snippet, r#"offsetPlane(${0:XY}, offset = ${1:3.14})"#); + assert_eq!(snippet, r#"offsetPlane(${0:XY}, offset = ${1:10})"#); } // We want to test the snippets we compile at lsp start. diff --git a/rust/kcl-lib/src/std/csg.rs b/rust/kcl-lib/src/std/csg.rs index 606655b23..300d1e9e2 100644 --- a/rust/kcl-lib/src/std/csg.rs +++ b/rust/kcl-lib/src/std/csg.rs @@ -1,7 +1,6 @@ //! Constructive Solid Geometry (CSG) operations. 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, @@ -34,85 +33,6 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// unionedPart = union([part001, part002]) -/// ``` -/// -/// ```no_run -/// // Union two cubes using operators. -/// // NOTE: This will not work when using codemods through the UI. -/// // Codemods will generate the stdlib function call instead. -/// -/// fn cube(center, size) { -/// return startSketchOn(XY) -/// |> startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// // This is the equivalent of: union([part001, part002]) -/// unionedPart = part001 + part002 -/// ``` -/// -/// ```no_run -/// // Union two cubes using the more programmer-friendly operator. -/// // NOTE: This will not work when using codemods through the UI. -/// // Codemods will generate the stdlib function call instead. -/// -/// fn cube(center, size) { -/// return startSketchOn(XY) -/// |> startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// // 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 -/// ``` -#[stdlib { - name = "union", - feature_tree_operation = true, - unlabeled_first = true, - args = { - solids = {docs = "The solids to union."}, - tolerance = {docs = "The tolerance to use for the union operation."}, - }, - tags = ["solid"] -}] pub(crate) async fn inner_union( solids: Vec, tolerance: Option, @@ -178,66 +98,6 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// intersectedPart = intersect([part001, part002]) -/// ``` -/// -/// ```no_run -/// // Intersect two cubes using operators. -/// // NOTE: This will not work when using codemods through the UI. -/// // Codemods will generate the stdlib function call instead. -/// -/// fn cube(center, size) { -/// return startSketchOn(XY) -/// |> startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// // This is the equivalent of: intersect([part001, part002]) -/// intersectedPart = part001 & part002 -/// ``` -#[stdlib { - name = "intersect", - feature_tree_operation = true, - unlabeled_first = true, - args = { - solids = {docs = "The solids to intersect."}, - tolerance = {docs = "The tolerance to use for the intersection operation."}, - }, - tags = ["solid"] -}] pub(crate) async fn inner_intersect( solids: Vec, tolerance: Option, @@ -297,67 +157,6 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// subtractedPart = subtract([part001], tools=[part002]) -/// ``` -/// -/// ```no_run -/// // Subtract a cylinder from a cube using operators. -/// // NOTE: This will not work when using codemods through the UI. -/// // Codemods will generate the stdlib function call instead. -/// -/// fn cube(center, size) { -/// return startSketchOn(XY) -/// |> startProfile(at = [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(center = [0, 0], size = 10) -/// part002 = cube(center = [7, 3], size = 5) -/// |> translate(z = 1) -/// -/// // This is the equivalent of: subtract([part001], tools=[part002]) -/// subtractedPart = part001 - part002 -/// ``` -#[stdlib { - name = "subtract", - feature_tree_operation = true, - unlabeled_first = true, - args = { - solids = {docs = "The solids to use as the base to subtract from."}, - tools = {docs = "The solids to subtract."}, - tolerance = {docs = "The tolerance to use for the subtraction operation."}, - }, - tags = ["solid"] -}] pub(crate) async fn inner_subtract( solids: Vec, tools: Vec, diff --git a/rust/kcl-lib/src/std/mod.rs b/rust/kcl-lib/src/std/mod.rs index 0d4008dc4..c482a3ff1 100644 --- a/rust/kcl-lib/src/std/mod.rs +++ b/rust/kcl-lib/src/std/mod.rs @@ -77,9 +77,7 @@ lazy_static! { Box::new(crate::std::sketch::BezierCurve), Box::new(crate::std::sketch::Subtract2D), Box::new(crate::std::patterns::PatternLinear2D), - Box::new(crate::std::patterns::PatternLinear3D), Box::new(crate::std::patterns::PatternCircular2D), - Box::new(crate::std::patterns::PatternCircular3D), Box::new(crate::std::edge::GetOppositeEdge), Box::new(crate::std::edge::GetNextAdjacentEdge), Box::new(crate::std::edge::GetPreviousAdjacentEdge), @@ -91,9 +89,6 @@ lazy_static! { Box::new(crate::std::transform::Scale), Box::new(crate::std::transform::Translate), Box::new(crate::std::transform::Rotate), - Box::new(crate::std::csg::Intersect), - Box::new(crate::std::csg::Union), - Box::new(crate::std::csg::Subtract), ]; } @@ -258,6 +253,30 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp |e, a| Box::pin(crate::std::shell::hollow(e, a)), StdFnProps::default("std::solid::hollow").include_in_feature_tree(), ), + ("solid", "union") => ( + |e, a| Box::pin(crate::std::csg::union(e, a)), + StdFnProps::default("std::solid::union").include_in_feature_tree(), + ), + ("solid", "intersect") => ( + |e, a| Box::pin(crate::std::csg::intersect(e, a)), + StdFnProps::default("std::solid::intersect").include_in_feature_tree(), + ), + ("solid", "subtract") => ( + |e, a| Box::pin(crate::std::csg::subtract(e, a)), + StdFnProps::default("std::solid::subtract").include_in_feature_tree(), + ), + ("solid", "patternTransform") => ( + |e, a| Box::pin(crate::std::patterns::pattern_transform(e, a)), + StdFnProps::default("std::solid::patternTransform").include_in_feature_tree(), + ), + ("solid", "patternLinear3d") => ( + |e, a| Box::pin(crate::std::patterns::pattern_linear_3d(e, a)), + StdFnProps::default("std::solid::patternLinear3d").include_in_feature_tree(), + ), + ("solid", "patternCircular3d") => ( + |e, a| Box::pin(crate::std::patterns::pattern_circular_3d(e, a)), + StdFnProps::default("std::solid::patternCircular3d").include_in_feature_tree(), + ), ("array", "map") => ( |e, a| Box::pin(crate::std::array::map(e, a)), StdFnProps::default("std::array::map"), @@ -278,10 +297,6 @@ pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProp |e, a| Box::pin(crate::std::clone::clone(e, a)), StdFnProps::default("std::clone").include_in_feature_tree(), ), - ("solid", "patternTransform") => ( - |e, a| Box::pin(crate::std::patterns::pattern_transform(e, a)), - StdFnProps::default("std::solid::patternTransform").include_in_feature_tree(), - ), ("sketch", "patternTransform2d") => ( |e, a| Box::pin(crate::std::patterns::pattern_transform_2d(e, a)), StdFnProps::default("std::sketch::patternTransform2d"), diff --git a/rust/kcl-lib/src/std/patterns.rs b/rust/kcl-lib/src/std/patterns.rs index f2634a1cd..904a5c2d8 100644 --- a/rust/kcl-lib/src/std/patterns.rs +++ b/rust/kcl-lib/src/std/patterns.rs @@ -647,110 +647,6 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result Ok(solids.into()) } -/// Repeat a 3-dimensional solid along a linear path, with a dynamic amount -/// of distance between each repetition, some specified number of times. -/// -/// ```no_run -/// /// Pattern using a named axis. -/// -/// exampleSketch = startSketchOn(XZ) -/// |> startProfile(at = [0, 0]) -/// |> line(end = [0, 2]) -/// |> line(end = [3, 1]) -/// |> line(end = [0, -4]) -/// |> close() -/// -/// example = extrude(exampleSketch, length = 1) -/// |> patternLinear3d( -/// axis = X, -/// instances = 7, -/// distance = 6 -/// ) -/// ``` -/// -/// ```no_run -/// /// Pattern using a raw axis. -/// -/// exampleSketch = startSketchOn(XZ) -/// |> startProfile(at = [0, 0]) -/// |> line(end = [0, 2]) -/// |> line(end = [3, 1]) -/// |> line(end = [0, -4]) -/// |> close() -/// -/// example = extrude(exampleSketch, length = 1) -/// |> patternLinear3d( -/// axis = [1, 0, 1], -/// instances = 7, -/// distance = 6 -/// ) -/// ``` -/// -/// /// -/// ```no_run -/// // Pattern a whole sketch on face. -/// size = 100 -/// case = startSketchOn(XY) -/// |> startProfile(at = [-size, -size]) -/// |> line(end = [2 * size, 0]) -/// |> line(end = [0, 2 * size]) -/// |> tangentialArc(endAbsolute = [-size, size]) -/// |> close(%) -/// |> extrude(length = 65) -/// -/// thing1 = startSketchOn(case, face = END) -/// |> circle(center = [-size / 2, -size / 2], radius = 25) -/// |> extrude(length = 50) -/// -/// thing2 = startSketchOn(case, face = END) -/// |> circle(center = [size / 2, -size / 2], radius = 25) -/// |> extrude(length = 50) -/// -/// // We pass in the "case" here since we want to pattern the whole sketch. -/// // And the case was the base of the sketch. -/// patternLinear3d(case, -/// axis= [1, 0, 0], -/// distance= 250, -/// instances=2, -/// ) -/// ``` -/// -/// ```no_run -/// // Pattern an object on a face. -/// size = 100 -/// case = startSketchOn(XY) -/// |> startProfile(at = [-size, -size]) -/// |> line(end = [2 * size, 0]) -/// |> line(end = [0, 2 * size]) -/// |> tangentialArc(endAbsolute = [-size, size]) -/// |> close(%) -/// |> extrude(length = 65) -/// -/// thing1 = startSketchOn(case, face = END) -/// |> circle(center =[-size / 2, -size / 2], radius = 25) -/// |> extrude(length = 50) -/// -/// // We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face. -/// patternLinear3d(thing1, -/// axis = [1, 0, 0], -/// distance = size, -/// instances =2, -/// useOriginal = true -/// ) -/// ``` -#[stdlib { - name = "patternLinear3d", - feature_tree_operation = true, - unlabeled_first = true, - args = { - solids = { docs = "The solid(s) to duplicate" }, - instances = { docs = "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." }, - distance = { docs = "Distance between each repetition. Also known as 'spacing'."}, - axis = { docs = "The axis of the pattern. A 3D vector.", snippet_value_array = ["1", "0", "0"] }, - use_original = { docs = "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." }, - }, - tags = ["solid"] -}] async fn inner_pattern_linear_3d( solids: Vec, instances: u32, @@ -1039,57 +935,6 @@ pub async fn pattern_circular_3d(exec_state: &mut ExecState, args: Args) -> Resu Ok(solids.into()) } -/// 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 orientation of the -/// solid with respect to the center of the circle is maintained. -/// -/// ```no_run -/// /// Pattern using a named axis. -/// -/// exampleSketch = startSketchOn(XZ) -/// |> circle(center = [0, 0], radius = 1) -/// -/// example = extrude(exampleSketch, length = -5) -/// |> patternCircular3d( -/// axis = X, -/// center = [10, -20, 0], -/// instances = 11, -/// arcDegrees = 360, -/// rotateDuplicates = true -/// ) -/// ``` -/// -/// ```no_run -/// /// Pattern using a raw axis. -/// -/// exampleSketch = startSketchOn(XZ) -/// |> circle(center = [0, 0], radius = 1) -/// -/// example = extrude(exampleSketch, length = -5) -/// |> patternCircular3d( -/// axis = [1, -1, 0], -/// center = [10, -20, 0], -/// instances = 11, -/// arcDegrees = 360, -/// rotateDuplicates = true -/// ) -/// ``` -#[stdlib { - name = "patternCircular3d", - feature_tree_operation = true, - unlabeled_first = true, - args = { - solids = { docs = "Which solid(s) to pattern" }, - instances = { docs = "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."}, - axis = { docs = "The axis around which to make the pattern. This is a 3D vector", snippet_value_array = ["1", "0", "0"]}, - center = { docs = "The center about which to make the pattern. This is a 3D vector.", snippet_value_array = ["0", "0", "0"]}, - arc_degrees = { docs = "The arc angle (in degrees) to place the repetitions. Must be greater than 0. Defaults to 360."}, - rotate_duplicates = { docs = "Whether or not to rotate the duplicates as they are copied. Defaults to true."}, - use_original = { docs = "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."}, - }, - tags = ["solid"] -}] #[allow(clippy::too_many_arguments)] async fn inner_pattern_circular_3d( solids: Vec, diff --git a/rust/kcl-lib/std/solid.kcl b/rust/kcl-lib/std/solid.kcl index fab519598..9bfbce79a 100644 --- a/rust/kcl-lib/std/solid.kcl +++ b/rust/kcl-lib/std/solid.kcl @@ -562,5 +562,361 @@ export fn patternTransform( /// 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. transform: fn(number(Count)): {}, /// If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. - useOriginal?: boolean = false, + useOriginal?: bool = false, +): [Solid; 1+] {} + +/// Repeat a 3-dimensional solid along a linear path, with a dynamic amount +/// of distance between each repetition, some specified number of times. +/// +/// ```kcl +/// /// Pattern using a named axis. +/// +/// exampleSketch = startSketchOn(XZ) +/// |> startProfile(at = [0, 0]) +/// |> line(end = [0, 2]) +/// |> line(end = [3, 1]) +/// |> line(end = [0, -4]) +/// |> close() +/// +/// example = extrude(exampleSketch, length = 1) +/// |> patternLinear3d( +/// axis = X, +/// instances = 7, +/// distance = 6 +/// ) +/// ``` +/// +/// ```kcl +/// /// Pattern using a raw axis. +/// +/// exampleSketch = startSketchOn(XZ) +/// |> startProfile(at = [0, 0]) +/// |> line(end = [0, 2]) +/// |> line(end = [3, 1]) +/// |> line(end = [0, -4]) +/// |> close() +/// +/// example = extrude(exampleSketch, length = 1) +/// |> patternLinear3d( +/// axis = [1, 0, 1], +/// instances = 7, +/// distance = 6 +/// ) +/// ``` +/// +/// ```kcl +/// // Pattern a whole sketch on face. +/// size = 100 +/// case = startSketchOn(XY) +/// |> startProfile(at = [-size, -size]) +/// |> line(end = [2 * size, 0]) +/// |> line(end = [0, 2 * size]) +/// |> tangentialArc(endAbsolute = [-size, size]) +/// |> close(%) +/// |> extrude(length = 65) +/// +/// thing1 = startSketchOn(case, face = END) +/// |> circle(center = [-size / 2, -size / 2], radius = 25) +/// |> extrude(length = 50) +/// +/// thing2 = startSketchOn(case, face = END) +/// |> circle(center = [size / 2, -size / 2], radius = 25) +/// |> extrude(length = 50) +/// +/// // We pass in the "case" here since we want to pattern the whole sketch. +/// // And the case was the base of the sketch. +/// patternLinear3d(case, +/// axis= [1, 0, 0], +/// distance= 250, +/// instances=2, +/// ) +/// ``` +/// +/// ```kcl +/// // Pattern an object on a face. +/// size = 100 +/// case = startSketchOn(XY) +/// |> startProfile(at = [-size, -size]) +/// |> line(end = [2 * size, 0]) +/// |> line(end = [0, 2 * size]) +/// |> tangentialArc(endAbsolute = [-size, size]) +/// |> close(%) +/// |> extrude(length = 65) +/// +/// thing1 = startSketchOn(case, face = END) +/// |> circle(center =[-size / 2, -size / 2], radius = 25) +/// |> extrude(length = 50) +/// +/// // We pass in `thing1` here with `useOriginal` since we want to pattern just this object on the face. +/// patternLinear3d(thing1, +/// axis = [1, 0, 0], +/// distance = size, +/// instances =2, +/// useOriginal = true +/// ) +/// ``` +@(impl = std_rust) +export fn patternLinear3d( + /// The solid(s) to duplicate. + @solids: [Solid; 1+], + /// 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. + instances: number(Count), + /// Distance between each repetition. Also known as 'spacing'. + distance: number(Length), + /// The axis of the pattern. A 3D vector. + @(snippetArray = ["1", "0", "0"]) + axis: Axis3d | Point3d, + /// If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. + useOriginal?: bool = false, +): [Solid; 1+] {} + +/// 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 orientation of the +/// solid with respect to the center of the circle is maintained. +/// +/// ```kcl +/// /// Pattern using a named axis. +/// +/// exampleSketch = startSketchOn(XZ) +/// |> circle(center = [0, 0], radius = 1) +/// +/// example = extrude(exampleSketch, length = -5) +/// |> patternCircular3d( +/// axis = X, +/// center = [10, -20, 0], +/// instances = 11, +/// arcDegrees = 360, +/// rotateDuplicates = true +/// ) +/// ``` +/// +/// ```kcl +/// /// Pattern using a raw axis. +/// +/// exampleSketch = startSketchOn(XZ) +/// |> circle(center = [0, 0], radius = 1) +/// +/// example = extrude(exampleSketch, length = -5) +/// |> patternCircular3d( +/// axis = [1, -1, 0], +/// center = [10, -20, 0], +/// instances = 11, +/// arcDegrees = 360, +/// rotateDuplicates = true +/// ) +/// ``` +@(impl = std_rust) +export fn patternCircular3d( + /// The solid(s) to pattern. + @solids: [Solid; 1+], + /// 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. + instances: number(Count), + /// The axis of the pattern. A 3D vector. + @(snippetArray = ["1", "0", "0"]) + axis: Axis3d | Point3d, + /// The center about which to make the pattern. This is a 3D vector. + @(snippetArray = ["0", "0", "0"]) + center: Point3d, + /// "The arc angle to place the repetitions. Must be greater than 0. + arcDegrees?: number(deg) = 360deg, + /// Whether or not to rotate the duplicates as they are copied. + rotateDuplicates?: bool = true, + /// If the target was sketched on an extrusion, setting this will use the original sketch as the target, not the entire joined solid. + useOriginal?: bool = false, +): [Solid; 1+] {} + +/// Union two or more solids into a single solid. +/// +/// ```kcl +/// // Union two cubes using the stdlib functions. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// unionedPart = union([part001, part002]) +/// ``` +/// +/// ```kcl +/// // Union two cubes using operators. +/// // NOTE: This will not work when using codemods through the UI. +/// // Codemods will generate the stdlib function call instead. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// // This is the equivalent of: union([part001, part002]) +/// unionedPart = part001 + part002 +/// ``` +/// +/// ```kcl +/// // Union two cubes using the more programmer-friendly operator. +/// // NOTE: This will not work when using codemods through the UI. +/// // Codemods will generate the stdlib function call instead. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// // 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 +/// ``` +@(impl = std_rust) +export fn union( + /// The solids to union. + @solids: [Solid; 2+], + /// The tolerance to use for the union operation. + tolerance?: number(Length), +): [Solid; 1+] {} + +/// 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. +/// +/// ```kcl +/// // Intersect two cubes using the stdlib functions. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// intersectedPart = intersect([part001, part002]) +/// ``` +/// +/// ```kcl +/// // Intersect two cubes using operators. +/// // NOTE: This will not work when using codemods through the UI. +/// // Codemods will generate the stdlib function call instead. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// // This is the equivalent of: intersect([part001, part002]) +/// intersectedPart = part001 & part002 +/// ``` +@(impl = std_rust) +export fn intersect( + /// The solids to intersect. + @solids: [Solid; 2+], + /// The tolerance to use for the intersection operation. + tolerance?: number(Length), +): [Solid; 1+] {} + +/// Subtract removes tool solids from base solids, leaving the remaining material. +/// +/// Performs a bool 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. +/// +/// ```kcl +/// // Subtract a cylinder from a cube using the stdlib functions. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// subtractedPart = subtract([part001], tools=[part002]) +/// ``` +/// +/// ```kcl +/// // Subtract a cylinder from a cube using operators. +/// // NOTE: This will not work when using codemods through the UI. +/// // Codemods will generate the stdlib function call instead. +/// +/// fn cube(center, size) { +/// return startSketchOn(XY) +/// |> startProfile(at = [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(center = [0, 0], size = 10) +/// part002 = cube(center = [7, 3], size = 5) +/// |> translate(z = 1) +/// +/// // This is the equivalent of: subtract([part001], tools=[part002]) +/// subtractedPart = part001 - part002 +/// ``` +@(impl = std_rust) +export fn subtract( + /// The solids to use as the base to subtract from. + @solids: [Solid; 1+], + /// The solids to subtract. + tools: [Solid], + /// The tolerance to use for the subtraction operation. + tolerance?: number(Length), ): [Solid; 1+] {} diff --git a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ops.snap b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ops.snap index bf009d67b..d43d87114 100644 --- a/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ops.snap +++ b/rust/kcl-lib/tests/circular_pattern3d_a_pattern/ops.snap @@ -53,10 +53,15 @@ description: Operations executed circular_pattern3d_a_pattern.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -129,13 +134,8 @@ description: Operations executed circular_pattern3d_a_pattern.kcl "type": "Number", "value": 7.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -202,13 +202,9 @@ description: Operations executed circular_pattern3d_a_pattern.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -312,13 +308,8 @@ description: Operations executed circular_pattern3d_a_pattern.kcl "type": "Number", "value": 41.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap index 7a17f3f5e..aa6d34f1d 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap @@ -225,13 +225,9 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -335,13 +331,8 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 10.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -478,13 +469,9 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -588,13 +575,8 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 10.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -747,13 +729,9 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -857,13 +835,8 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 10.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/bone-plate/ops.snap b/rust/kcl-lib/tests/kcl_samples/bone-plate/ops.snap index d8d3b3d41..979cbfb76 100644 --- a/rust/kcl-lib/tests/kcl_samples/bone-plate/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/bone-plate/ops.snap @@ -414,10 +414,15 @@ description: Operations executed bone-plate.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -470,10 +475,15 @@ description: Operations executed bone-plate.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -526,10 +536,15 @@ description: Operations executed bone-plate.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -582,10 +597,15 @@ description: Operations executed bone-plate.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap b/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap index 12e8cd28e..abfa3c863 100644 --- a/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap @@ -1036,10 +1036,15 @@ description: Operations executed brake-rotor.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1049,13 +1054,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1159,13 +1160,8 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 36.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/ops.snap b/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/ops.snap index 92c20d77a..ffbfcaada 100644 --- a/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/car-wheel-assembly/ops.snap @@ -66,13 +66,9 @@ description: Operations executed car-wheel-assembly.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -176,13 +172,8 @@ description: Operations executed car-wheel-assembly.kcl "type": "Number", "value": 5.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/cold-plate/ops.snap b/rust/kcl-lib/tests/kcl_samples/cold-plate/ops.snap index 870e41b92..44837f65b 100644 --- a/rust/kcl-lib/tests/kcl_samples/cold-plate/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/cold-plate/ops.snap @@ -324,13 +324,8 @@ description: Operations executed cold-plate.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/counterdrilled-weldment/ops.snap b/rust/kcl-lib/tests/kcl_samples/counterdrilled-weldment/ops.snap index 559d73f66..25d5ae623 100644 --- a/rust/kcl-lib/tests/kcl_samples/counterdrilled-weldment/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/counterdrilled-weldment/ops.snap @@ -1475,10 +1475,15 @@ description: Operations executed counterdrilled-weldment.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1488,13 +1493,9 @@ description: Operations executed counterdrilled-weldment.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1598,13 +1599,8 @@ description: Operations executed counterdrilled-weldment.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1624,10 +1620,15 @@ description: Operations executed counterdrilled-weldment.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1637,13 +1638,9 @@ description: Operations executed counterdrilled-weldment.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1747,13 +1744,8 @@ description: Operations executed counterdrilled-weldment.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap b/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap index ddbf1c7d4..9ad929112 100644 --- a/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap @@ -71,10 +71,15 @@ description: Operations executed cpu-cooler.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -147,13 +152,8 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -253,13 +253,8 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -407,13 +402,8 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -595,13 +585,9 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -705,13 +691,8 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -791,13 +772,9 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -901,13 +878,8 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/curtain-wall-anchor-plate/ops.snap b/rust/kcl-lib/tests/kcl_samples/curtain-wall-anchor-plate/ops.snap index 428c735ae..8da990aab 100644 --- a/rust/kcl-lib/tests/kcl_samples/curtain-wall-anchor-plate/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/curtain-wall-anchor-plate/ops.snap @@ -807,10 +807,15 @@ description: Operations executed curtain-wall-anchor-plate.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -883,13 +888,8 @@ description: Operations executed curtain-wall-anchor-plate.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap index 4e41779ff..db0c521f0 100644 --- a/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/focusrite-scarlett-mounting-bracket/ops.snap @@ -717,13 +717,8 @@ description: Operations executed focusrite-scarlett-mounting-bracket.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1107,13 +1102,8 @@ description: Operations executed focusrite-scarlett-mounting-bracket.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap b/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap index 2638e27c9..e40612368 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap @@ -358,13 +358,9 @@ description: Operations executed french-press.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -468,13 +464,8 @@ description: Operations executed french-press.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/gear-rack/ops.snap b/rust/kcl-lib/tests/kcl_samples/gear-rack/ops.snap index f9a6ddf1c..1571c043a 100644 --- a/rust/kcl-lib/tests/kcl_samples/gear-rack/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gear-rack/ops.snap @@ -185,13 +185,8 @@ description: Operations executed gear-rack.kcl "type": "Number", "value": 63.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap index d086920fd..4ed4a6a08 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap @@ -113,10 +113,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -126,13 +131,9 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -236,13 +237,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -416,10 +412,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -429,13 +430,9 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -539,13 +536,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -664,13 +656,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -806,13 +793,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -924,13 +906,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1066,13 +1043,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1522,10 +1494,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1598,13 +1575,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1704,13 +1676,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1723,10 +1690,15 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1799,13 +1771,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1905,13 +1872,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ops.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ops.snap index 64cd83d49..44666ec52 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate/ops.snap @@ -113,10 +113,15 @@ description: Operations executed gridfinity-baseplate.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -126,13 +131,9 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -236,13 +237,8 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -416,10 +412,15 @@ description: Operations executed gridfinity-baseplate.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -429,13 +430,9 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -539,13 +536,8 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -664,13 +656,8 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -806,13 +793,8 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -924,13 +906,8 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1066,13 +1043,8 @@ description: Operations executed gridfinity-baseplate.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap index cb9b701bd..4c42f6b8a 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap @@ -113,10 +113,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -126,13 +131,9 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -236,13 +237,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -416,10 +412,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -429,13 +430,9 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -539,13 +536,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -843,13 +835,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -985,13 +972,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1103,13 +1085,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1245,13 +1222,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1264,10 +1236,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1340,13 +1317,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1446,13 +1418,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -2588,10 +2555,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -2601,13 +2573,9 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -2711,13 +2679,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -2737,10 +2700,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -2750,13 +2718,9 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -2860,13 +2824,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -3400,10 +3359,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -3413,13 +3377,9 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -3523,13 +3483,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -3549,10 +3504,15 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -3562,13 +3522,9 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -3672,13 +3628,8 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ops.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ops.snap index 1d9e61858..6e382b847 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins/ops.snap @@ -113,10 +113,15 @@ description: Operations executed gridfinity-bins.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -126,13 +131,9 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -236,13 +237,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -416,10 +412,15 @@ description: Operations executed gridfinity-bins.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -429,13 +430,9 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -539,13 +536,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -843,13 +835,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -985,13 +972,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1103,13 +1085,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1245,13 +1222,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1264,10 +1236,15 @@ description: Operations executed gridfinity-bins.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -1340,13 +1317,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1446,13 +1418,8 @@ description: Operations executed gridfinity-bins.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap index e06c1a28c..37ca09a48 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap @@ -2492,13 +2492,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -2602,13 +2598,8 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap b/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap index 7255a89e3..52ea84ef9 100644 --- a/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap @@ -716,10 +716,15 @@ description: Operations executed helium-tank.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -757,10 +762,15 @@ description: Operations executed helium-tank.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -833,13 +843,8 @@ description: Operations executed helium-tank.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1038,13 +1043,8 @@ description: Operations executed helium-tank.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap index f07e801b7..9b6de0e38 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap @@ -1871,13 +1871,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1981,13 +1977,8 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap index 9c919a2a8..ae611fb07 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap @@ -4747,10 +4747,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -4823,13 +4828,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -4842,10 +4842,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -4918,13 +4923,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -4937,10 +4937,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5013,13 +5018,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5032,10 +5032,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5108,13 +5113,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5127,10 +5127,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5203,13 +5208,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5222,10 +5222,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5298,13 +5303,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5317,10 +5317,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5393,13 +5398,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5412,10 +5412,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5488,13 +5493,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5507,10 +5507,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5583,13 +5588,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 10.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5602,10 +5602,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5678,13 +5683,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5697,10 +5697,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5773,13 +5778,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5792,10 +5792,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5868,13 +5873,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 11.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5887,10 +5887,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -5963,13 +5968,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -5982,10 +5982,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6058,13 +6063,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6077,10 +6077,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6153,13 +6158,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 12.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6172,10 +6172,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6248,13 +6253,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6267,10 +6267,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6343,13 +6348,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 13.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6362,10 +6362,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6438,13 +6443,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6457,10 +6457,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6533,13 +6538,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6552,10 +6552,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6628,13 +6633,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 12.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -6647,10 +6647,15 @@ description: Operations executed keyboard.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -6723,13 +6728,8 @@ description: Operations executed keyboard.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/pdu-faceplate/ops.snap b/rust/kcl-lib/tests/kcl_samples/pdu-faceplate/ops.snap index 1b37d6e71..44b27c425 100644 --- a/rust/kcl-lib/tests/kcl_samples/pdu-faceplate/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/pdu-faceplate/ops.snap @@ -814,13 +814,8 @@ description: Operations executed pdu-faceplate.kcl "type": "Number", "value": 8.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap b/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap index 89f6848de..0352bc21a 100644 --- a/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/pipe-flange-assembly/ops.snap @@ -104,10 +104,15 @@ description: Operations executed pipe-flange-assembly.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -117,13 +122,9 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -227,13 +228,8 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -352,13 +348,8 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -382,10 +373,15 @@ description: Operations executed pipe-flange-assembly.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -395,13 +391,9 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -505,13 +497,8 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -542,10 +529,15 @@ description: Operations executed pipe-flange-assembly.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -555,13 +547,9 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -665,13 +653,8 @@ description: Operations executed pipe-flange-assembly.kcl "type": "Number", "value": 4.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ops.snap b/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ops.snap index bc4becebf..9a057f9a4 100644 --- a/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ops.snap @@ -209,10 +209,15 @@ description: Operations executed surgical-drill-guide.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/kcl_samples/truss-structure/ops.snap b/rust/kcl-lib/tests/kcl_samples/truss-structure/ops.snap index 4da09a822..94b2575f9 100644 --- a/rust/kcl-lib/tests/kcl_samples/truss-structure/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/truss-structure/ops.snap @@ -317,10 +317,15 @@ description: Operations executed truss-structure.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -393,13 +398,8 @@ description: Operations executed truss-structure.kcl "type": "Number", "value": 3.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -457,10 +457,15 @@ description: Operations executed truss-structure.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -533,13 +538,8 @@ description: Operations executed truss-structure.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -695,13 +695,8 @@ description: Operations executed truss-structure.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/utility-sink/ops.snap b/rust/kcl-lib/tests/kcl_samples/utility-sink/ops.snap index 4fbe48a0d..4c038fdcb 100644 --- a/rust/kcl-lib/tests/kcl_samples/utility-sink/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/utility-sink/ops.snap @@ -1078,13 +1078,8 @@ description: Operations executed utility-sink.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -1297,13 +1292,8 @@ description: Operations executed utility-sink.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/wing-spar/ops.snap b/rust/kcl-lib/tests/kcl_samples/wing-spar/ops.snap index 4e762bc6b..5778c3dc0 100644 --- a/rust/kcl-lib/tests/kcl_samples/wing-spar/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/wing-spar/ops.snap @@ -284,13 +284,8 @@ description: Operations executed wing-spar.kcl "type": "Number", "value": 5.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ops.snap b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ops.snap index fa3cd61fb..d4bbd3fa3 100644 --- a/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ops.snap +++ b/rust/kcl-lib/tests/linear_pattern3d_a_pattern/ops.snap @@ -53,10 +53,15 @@ description: Operations executed linear_pattern3d_a_pattern.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -129,13 +134,8 @@ description: Operations executed linear_pattern3d_a_pattern.kcl "type": "Number", "value": 7.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -265,13 +265,8 @@ description: Operations executed linear_pattern3d_a_pattern.kcl "type": "Number", "value": 7.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/multi_target_csg/execution_error.snap b/rust/kcl-lib/tests/multi_target_csg/execution_error.snap index 206fdd29c..be9cc8641 100644 --- a/rust/kcl-lib/tests/multi_target_csg/execution_error.snap +++ b/rust/kcl-lib/tests/multi_target_csg/execution_error.snap @@ -8,7 +8,19 @@ KCL Engine error ╭─[69:10] 68 │ 69 │ cut000 = subtract(extrude001, tools = cut000Extrude) - · ─────────────────────┬───────────────────── + · ─────────────────────┬─────────────────────┬ + · ╰── tests/multi_target_csg/input.kcl · ╰── tests/multi_target_csg/input.kcl 70 │ ╰──── + ╰─▶ KCL Engine error + + × engine: Currently the engine does not support multiple targets on + │ subtract + ╭─[69:10] + 68 │ + 69 │ cut000 = subtract(extrude001, tools = cut000Extrude) + · ─────────────────────┬───────────────────── + · ╰── tests/multi_target_csg/input.kcl + 70 │ + ╰──── diff --git a/rust/kcl-lib/tests/multi_target_csg/ops.snap b/rust/kcl-lib/tests/multi_target_csg/ops.snap index 421216b9e..b4fc07cfa 100644 --- a/rust/kcl-lib/tests/multi_target_csg/ops.snap +++ b/rust/kcl-lib/tests/multi_target_csg/ops.snap @@ -251,10 +251,15 @@ description: Operations executed multi_target_csg.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_intersect0.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-intersect0.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_intersect0.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-intersect0.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_intersect1.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-intersect1.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_intersect1.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-intersect1.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pattern_circular_3d0.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternCircular3d0.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_pattern_circular_3d0.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternCircular3d0.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pattern_circular_3d1.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternCircular3d1.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_pattern_circular_3d1.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternCircular3d1.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d0.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d0.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d0.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d0.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d1.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d1.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d1.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d1.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d2.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d2.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d2.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d2.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d3.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d3.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_pattern_linear_3d3.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-patternLinear3d3.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_subtract0.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-subtract0.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_subtract0.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-subtract0.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_subtract1.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-subtract1.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_subtract1.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-subtract1.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_union0.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-union0.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_union0.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-union0.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_union1.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-union1.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_union1.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-union1.png diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_union2.png b/rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-union2.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_union2.png rename to rust/kcl-lib/tests/outputs/serial_test_example_fn_std-solid-union2.png diff --git a/rust/kcl-lib/tests/pattern_into_union/execution_error.snap b/rust/kcl-lib/tests/pattern_into_union/execution_error.snap index 9274575e7..9e762e28e 100644 --- a/rust/kcl-lib/tests/pattern_into_union/execution_error.snap +++ b/rust/kcl-lib/tests/pattern_into_union/execution_error.snap @@ -8,6 +8,16 @@ KCL Engine error ╭─[67:1] 66 │ 67 │ union([base,endTabs]) - · ──────────┬────────── + · ──────────┬──────────┬ + · ╰── tests/pattern_into_union/input.kcl · ╰── tests/pattern_into_union/input.kcl ╰──── + ╰─▶ KCL Engine error + + × engine: More than 2 solids were passed to the low-level CSG method + ╭─[67:1] + 66 │ + 67 │ union([base,endTabs]) + · ──────────┬────────── + · ╰── tests/pattern_into_union/input.kcl + ╰──── diff --git a/rust/kcl-lib/tests/pattern_into_union/ops.snap b/rust/kcl-lib/tests/pattern_into_union/ops.snap index 00e26f5c5..8dbe79a51 100644 --- a/rust/kcl-lib/tests/pattern_into_union/ops.snap +++ b/rust/kcl-lib/tests/pattern_into_union/ops.snap @@ -218,13 +218,8 @@ description: Operations executed pattern_into_union.kcl "type": "Number", "value": 21.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -402,13 +397,8 @@ description: Operations executed pattern_into_union.kcl "type": "Number", "value": 21.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -430,135 +420,130 @@ description: Operations executed pattern_into_union.kcl } }, { - "type": "Array", - "value": [ - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - } - ] + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } } ] }, diff --git a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap index 6a5a65a5a..18fd29068 100644 --- a/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap +++ b/rust/kcl-lib/tests/subtract_doesnt_need_brackets/ops.snap @@ -222,20 +222,30 @@ description: Operations executed subtract_doesnt_need_brackets.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression00/ops.snap b/rust/kcl-lib/tests/subtract_regression00/ops.snap index 9f13fe697..337a6fbf4 100644 --- a/rust/kcl-lib/tests/subtract_regression00/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression00/ops.snap @@ -144,20 +144,30 @@ description: Operations executed subtract_regression00.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression01/ops.snap b/rust/kcl-lib/tests/subtract_regression01/ops.snap index e023878da..51eb18476 100644 --- a/rust/kcl-lib/tests/subtract_regression01/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression01/ops.snap @@ -149,20 +149,30 @@ description: Operations executed subtract_regression01.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression02/ops.snap b/rust/kcl-lib/tests/subtract_regression02/ops.snap index b9ef063b2..72036a22f 100644 --- a/rust/kcl-lib/tests/subtract_regression02/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression02/ops.snap @@ -135,20 +135,30 @@ description: Operations executed subtract_regression02.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -226,20 +236,30 @@ description: Operations executed subtract_regression02.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression03/ops.snap b/rust/kcl-lib/tests/subtract_regression03/ops.snap index afb2396d7..9a91b486c 100644 --- a/rust/kcl-lib/tests/subtract_regression03/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression03/ops.snap @@ -463,20 +463,30 @@ description: Operations executed subtract_regression03.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -715,20 +725,30 @@ description: Operations executed subtract_regression03.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression04/ops.snap b/rust/kcl-lib/tests/subtract_regression04/ops.snap index 70a08e765..2fabc08f2 100644 --- a/rust/kcl-lib/tests/subtract_regression04/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression04/ops.snap @@ -194,20 +194,30 @@ description: Operations executed subtract_regression04.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression05/ops.snap b/rust/kcl-lib/tests/subtract_regression05/ops.snap index 33420a07e..79a262d8c 100644 --- a/rust/kcl-lib/tests/subtract_regression05/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression05/ops.snap @@ -204,20 +204,30 @@ description: Operations executed subtract_regression05.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression06/ops.snap b/rust/kcl-lib/tests/subtract_regression06/ops.snap index 9f9f3f33a..75c2b113b 100644 --- a/rust/kcl-lib/tests/subtract_regression06/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression06/ops.snap @@ -296,20 +296,30 @@ description: Operations executed subtract_regression06.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression07/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_regression07/artifact_graph_flowchart.snap.md index 27c105bc7..7335a8fe8 100644 --- a/rust/kcl-lib/tests/subtract_regression07/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/subtract_regression07/artifact_graph_flowchart.snap.md @@ -139,7 +139,7 @@ flowchart LR 15 --- 42 15 --- 49 18 --- 32 - 18 x--> 35 + 18 x--> 36 18 --- 43 18 --- 50 23 --- 26 @@ -194,5 +194,5 @@ flowchart LR 40 <--x 34 41 <--x 34 42 <--x 34 - 43 <--x 36 + 43 <--x 35 ``` diff --git a/rust/kcl-lib/tests/subtract_regression07/ops.snap b/rust/kcl-lib/tests/subtract_regression07/ops.snap index 1bdd2ff7e..7a6358174 100644 --- a/rust/kcl-lib/tests/subtract_regression07/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression07/ops.snap @@ -206,20 +206,30 @@ description: Operations executed subtract_regression07.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md index 33dcb9388..004106c4b 100644 --- a/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/subtract_regression08/artifact_graph_flowchart.snap.md @@ -86,12 +86,12 @@ flowchart LR 8 --- 18 8 ---- 20 8 --- 21 - 12 <--x 22 + 12 --- 22 12 <--x 23 - 12 --- 24 + 12 <--x 24 16 <--x 25 - 16 --- 26 - 16 <--x 27 + 16 <--x 26 + 16 --- 27 19 --- 22 19 --- 23 19 --- 24 diff --git a/rust/kcl-lib/tests/subtract_regression08/ops.snap b/rust/kcl-lib/tests/subtract_regression08/ops.snap index 508bb6803..580576dc9 100644 --- a/rust/kcl-lib/tests/subtract_regression08/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression08/ops.snap @@ -124,20 +124,30 @@ description: Operations executed subtract_regression08.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression09/ops.snap b/rust/kcl-lib/tests/subtract_regression09/ops.snap index b21147203..4c488513d 100644 --- a/rust/kcl-lib/tests/subtract_regression09/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression09/ops.snap @@ -194,20 +194,30 @@ description: Operations executed subtract_regression09.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression10/ops.snap b/rust/kcl-lib/tests/subtract_regression10/ops.snap index 6436b5597..04e083046 100644 --- a/rust/kcl-lib/tests/subtract_regression10/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression10/ops.snap @@ -188,10 +188,15 @@ description: Operations executed subtract_regression10.kcl "name": "patternCircular3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -201,13 +206,9 @@ description: Operations executed subtract_regression10.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -311,13 +312,8 @@ description: Operations executed subtract_regression10.kcl "type": "Number", "value": 2.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -352,10 +348,15 @@ description: Operations executed subtract_regression10.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -990,10 +991,15 @@ description: Operations executed subtract_regression10.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } @@ -1235,10 +1241,15 @@ description: Operations executed subtract_regression10.kcl "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression11/ops.snap b/rust/kcl-lib/tests/subtract_regression11/ops.snap index 3d8fa4b45..ab35e9550 100644 --- a/rust/kcl-lib/tests/subtract_regression11/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression11/ops.snap @@ -194,20 +194,30 @@ description: Operations executed subtract_regression11.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_regression12/ops.snap b/rust/kcl-lib/tests/subtract_regression12/ops.snap index 5b1311d85..d164659be 100644 --- a/rust/kcl-lib/tests/subtract_regression12/ops.snap +++ b/rust/kcl-lib/tests/subtract_regression12/ops.snap @@ -194,20 +194,30 @@ description: Operations executed subtract_regression12.kcl "name": "subtract", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, "labeledArgs": { "tools": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] } diff --git a/rust/kcl-lib/tests/subtract_with_pattern/ops.snap b/rust/kcl-lib/tests/subtract_with_pattern/ops.snap index 68c83a6b6..9d2f21907 100644 --- a/rust/kcl-lib/tests/subtract_with_pattern/ops.snap +++ b/rust/kcl-lib/tests/subtract_with_pattern/ops.snap @@ -98,10 +98,15 @@ description: Operations executed subtract_with_pattern.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -174,13 +179,8 @@ description: Operations executed subtract_with_pattern.kcl "type": "Number", "value": 10.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -211,69 +211,64 @@ description: Operations executed subtract_with_pattern.kcl "type": "Array", "value": [ { - "type": "Array", - "value": [ - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - } - ] + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } } ] }, diff --git a/rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ops.snap b/rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ops.snap index 93185aa17..8ba39ad44 100644 --- a/rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ops.snap +++ b/rust/kcl-lib/tests/subtract_with_pattern_cut_thru/ops.snap @@ -98,10 +98,15 @@ description: Operations executed subtract_with_pattern_cut_thru.kcl "name": "patternLinear3d", "unlabeledArg": { "value": { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } + "type": "Array", + "value": [ + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + } + ] }, "sourceRange": [] }, @@ -174,13 +179,8 @@ description: Operations executed subtract_with_pattern_cut_thru.kcl "type": "Number", "value": 5.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Count" } }, "sourceRange": [] @@ -211,39 +211,34 @@ description: Operations executed subtract_with_pattern_cut_thru.kcl "type": "Array", "value": [ { - "type": "Array", - "value": [ - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - }, - { - "type": "Solid", - "value": { - "artifactId": "[uuid]" - } - } - ] + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } + }, + { + "type": "Solid", + "value": { + "artifactId": "[uuid]" + } } ] },